提交后PHP会话丢失

时间:2014-01-31 10:31:16

标签: php session

这没有任何意义。它适用于localhost,但不适用于我的服务器。

在提交表单之前,如果我var_dump() $_SESSION它会检索到以下内容:

array(2) { ["email"]=> string(40) "082b6eff9db5019e6a28f586a679b7f72fab27f4" ["id"]=> int(5) }

表格就是这个:

<form method='POST' action='response.php?type=add_customer'>
    <input type='text' name='customer'/>
    <input type='submit' value='add'/>
</form>

如果我var_dump() response.php 上的$_SESSION,我会收到:array(0) { }

if(!isset($_SESSION)){ session_start(); }
var_dump($_SESSION);

这怎么可能?

因为它在本地主机上工作但在我的服务器中不起作用..可能是php.ini问题吗?如果是这样,是什么?

编辑(1):将我的代码更改为此(在 response.php 中):

session_start();

if(isset($_REQUEST['type'])){
    switch ($_REQUEST['type']){
       case 'add_customer': 
        var_dump($_SESSION);
        break;
    }
}

继续不工作。它检索一个空数组。

编辑(2):已解决。 如果有人能向我解释原因:

session_start();
var_dump($_SESSION); // doesn't work
print_r($_SESSION); // doesn't work
echo $_SESSION['id']; // works

我很感激。因为问题是这个。

3 个答案:

答案 0 :(得分:2)

session_start();作为第一件事,在每页顶部的<?php标记之后,您希望$_SESSION数据保持不变

答案 1 :(得分:0)

组合GET和POST不太好。将表单更新为以下

<form method="POST" action="response.php">
    <input type="hidden" name="type" value="add_customer" />
    <input type="text" name="customer" />
    <input type="submit" value="add" />
</form>

答案 2 :(得分:0)

session_start();
print_r($_SESSION);

将这两行放在你的两个页面中。 (在你的页面的开头&lt;?php标签之后,在任何包含之前,在任何输出之前(空格,空格等)之前 在正常情况下,这些应该打印完全相同。

现在,由于您的第二页没有任何会话变量,我猜测会话未设置。所以我最好的猜测是阻止/阻止你的会话或删除/取消它们。

您确定不加载/包含以下行之外的任何内容吗?

if(isset($_REQUEST['type'])){

编辑1:让我们尝试一下:
在www目录中创建文件夹会话。为初学者设置777的权限。

<?php
session_save_path('/home/project/www/sessions');
ini_set('session.gc_probability', 1);
session_start();
print_r($_SESSION);
?>

将上面的代码放在页面顶部并检查是否有任何内容