我在php中遇到会话问题。
我有一个名为" blog.php"我从开头的session_start()开始,然后我有一个表单输入用户名和密码:
<?php
session_start();?>
<p align="center">To be able to make a post, please sign in.</p>
<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<form name="form1" method="post" action="logincheck.php">
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3"><strong>Member Login </strong></td>
</tr>
<tr>
<td width="78">Username</td>
<td width="6">:</td>
<td width="294"><input name="user" type="text"></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input name="pass" type="text"></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td><input type="submit" name="Submit" value="Login"></td>
</tr>
</table>
</td>
</form>
</tr>
</table>
然后我有另一个名为&#34; logincheck.php&#34;我也开始使用session_start(),然后我尝试访问并使用用户输入的内容:
<?php
session_start();
$username = $_POST['user'];
$password = $_POST['pass'];
?>
现在有了这个我得到2个Undefined索引的注意事项;一个用于&#34;用户&#34;另一个用于&#34;传递&#34;。
然后我用了var_dump($ _ POST);看看是什么(如果有的话)通过,结果我得到了这个:
array (size=1)
'u' => string '�T�e�s�t� �U�s�e�r�' (length=19)
所以我想保存的变量不能正确保存,因为首先我有2个来自用户的输入,所以数组大小应为2;第二,我正在保存字符串&#34;测试用户&#34;在变量&#34; user&#34;而不是&#34; u&#34;正如var_dumb($ _ POST)向我展示的那样。 我没有想法,因为在另一个项目中它完全正常。
我在这里做错了什么想法?
编辑:代码没有错,是我的错误,因为我没有更改服务器上的根目录。
但是当我通过将logincheck.php更改为:
涉及第三页时,会再次出现错误<?php
session_start();
$username = $_POST['user'];
$password = $_POST['pass'];
header("location:blog_reg.php"); //<--new
?>
blog_reg.php包含以下代码:
<?php
session_start();
echo "<p align='center'>Hello ", $_SESSION['user'], "!";
?>
在blog_reg.php上使用var_dump($_POST);
节目:
array (size=0)
empty
并给我&#34;未定义的索引:user&#34;通知。
有什么想法吗?
编辑2 :
确定。这个会话似乎有些问题,因为我只是尝试了一个非常简单的代码: 1.PHP:
<?php
session_start();
$_SESSION['test'] = "hi";
header("location:2.php");
?>
2.PHP:
<?php
session_start();
echo $_SESSION['test'];
?>
错误:Notice: Undefined index: test in C:\wamp\www\test\2.php on line 4
[已解决] - 最后经过数小时的测试和检查James,我找到了解决方案。 在php.ini中,我们必须将session.use_cookies更改为值1.
再次非常感谢James在过去几个小时里耐心地和我盯着。
答案 0 :(得分:1)
编辑 - 问题已解决:
为了清楚起见,在聊天讨论之后,事实证明session.use_cookies
已被禁用(因为OP事先已经使用了会话)。
OP在php.ini上重新开启,问题解决了!
其他有类似问题的人,在PHP脚本中运行php_info()
并查看SESSION部分以查看是否存在任何问题。
例如session.use_cookies off off
(除非你通过GET使用会话,在这种情况下这些不需要打开,但如果会话数据在URL中,显然要注意安全性!)
这看起来像编码问题。
我只是运行你的代码(复制/粘贴),它完全正常。
将代码编辑器设置为使用 UTF-8而不用bom ,然后保存两个文件(这样它们显示为保存为utf-8),然后再次尝试运行脚本(刷新页面,可能需要清除浏览器缓存,具体取决于您的配置)。
logincheck.php的测试代码:
<?php
session_start();
$username = $_POST['user'];
$password = $_POST['pass'];
echo $username."<br>".$password;
echo "<br><br>";
var_dump($_POST);
?>
在回答您的问题编辑时,您的blog_reg.php
无法使用会话,因为您未设置会话。您只设置范围仅在该页面或包含页面内的变量,并且当您执行header(Location)
时,变量将被重置。
在logincheck.php中尝试此操作:
session_start();
$_SESSION['user'] = $_POST['user']; //<-- Variable changed to session
//$password = $_POST['pass']; DO NOT make a session with this
header("location:blog_reg.php");
然后在blog_reg.php
中,它可以使用新的$_SESSION['user'] = $_POST['user'];
请勿将密码存储在最终用户可用的会话中,并且可以从第三方轻松获取。
在blog_reg.php 上使用var_dump($_POST)
将显示零数据,因为您不向其发送任何数据。
您将数据从blog.php发布到logincheck.php,然后在logincheck.php中将POSTed数据转换为会话,然后重定向到blog-reg.php,您在其中使用SESSION,而不是POST。
你没有从logincheck.php发布到blog-reg.php,因此blog-reg.php没有POST数据,因此`var_dump($ _ POST)``将显示零数据。
阅读有关POST和SESSION之间差异的内容,虽然也看了GET,但您对PHP应用程序(或者在这种情况下是单个文件)中处理数据有了更深入的了解:
POST
http://php.net/manual/en/reserved.variables.post.php
SESSION
http://php.net/manual/en/session.examples.basic.php
GET http://php.net/manual/en/reserved.variables.get.php
Sarah,我已经测试了下面的代码,它运行正常,这意味着问题出在其他地方。也许您的服务器配置不起作用,或者您在此问题中没有显示其他代码,这些代码干扰了代码的工作。
在这里有太多潜在问题时,很难提供帮助。
制作三个新文件,如下所示,并对它们进行测试,它只是您的代码,其中包含我提出的修改建议:
<强> form.php的强>
<?php
session_start();?>
<p align="center">To be able to make a post, please sign in.</p>
<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<form name="form1" method="post" action="login.php">
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3"><strong>Member Login </strong></td>
</tr>
<tr>
<td width="78">Username</td>
<td width="6">:</td>
<td width="294"><input name="user" type="text"></td>
</tr>
<tr>
<td>Password</td>
<td>:</td>
<td><input name="pass" type="text"></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td><input type="submit" name="Submit" value="Login"></td>
</tr>
</table>
</td>
</form>
</tr>
</table>
<强>的login.php 强>
<?php
session_start();
$_SESSION['user'] = $_POST['user'];
header("location: result.php");
?>
<强> result.php 强>
<?php
session_start();
echo "<p align='center'>Hello ", $_SESSION['user'], "!";
echo "<br><br>POST DUMP (will be empty)";
var_dump($_POST);
echo "<br><br>SESSION DUMP (will have user name data)";
var_dump($_SESSION);
?>