php session不会保存所有变量并使用不同的名称保存变量" name"分配

时间:2014-11-02 14:13:23

标签: php session

我在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>&nbsp;</td>
<td>&nbsp;</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在过去几个小时里耐心地和我盯着。

1 个答案:

答案 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'];

请勿将密码存储在最终用户可用的会话中,并且可以从第三方轻松获取。

2ND EDIT

在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>&nbsp;</td>
<td>&nbsp;</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);
?>