php会话无法正常工作

时间:2012-03-30 12:26:22

标签: php session

您好我在页面之间保持会话时遇到问题,代码在我之前运行php5的服务器上工作但在我最近的服务器上没有,我想知道它是否是一个bug?

<?php
session_start();
$_SESSION['session'] = $_POST['session'];

header("location: www.mysite.com/page1.php");
?>


<?php
session_start();

echo "Good morning" . $_SESSION['session'];   //returns empty session always.
?>

任何想法?会话在第一页举行,但不在第二页。

6 个答案:

答案 0 :(得分:2)

如果您错过了,请确保在使用session_start()变量的每个页面上都$_SESSION

你应该检查你的php.ini文件,看看发生了什么。

确保session.use_cookies = 1session.save_handler = files

使用此测试页面查看它是一般PHP问题还是仅代码。

<?php
    session_start();

    if(isset($_SESSION)){
        echo "Session variable exists<br/>";

        if(!isset($_SESSION['test'])){
            $_SESSION['test'] = "Success!";
            echo "Variable has been set, refresh the page and see if stored it properly.";
        }else{
            echo $_SESSION['test'];
        }
    }else{
        echo "No session variable has been created.";
    }
?>

如果有效,那么它与您的代码有关。

如果您将会话变量设置为$_POST['session']我是否假设您提交的表单中包含名为session的输入?

此设置 应该。

的index.php

<form action='page0.php' method='POST'>
    <input type='hidden' name='session' value='SPAAAAACE' />
    <input type='submit' />
</form>

Page0.php

<?php
    session_start();
    $_SESSION['session'] = $_POST['session'];

    header("location: www.mysite.com/page1.php");
?>

page1.php中

<?php
    session_start();

    echo "Good morning" . $_SESSION['session'];
?>

出于完整性和调试目的

如果您使用的是无Cookie会话,则必须手动将SID (session id)添加到标题重定向中,如下所示

header("location: www.mysite.com/page.php?".htmlspecialchars(SID));

如果问题仍然存在,则可能是许可问题 也许你不允许读取存储在服务器上的会话文件?

更新:OP评论说这是一个权限问题,问题现已解决

答案 1 :(得分:0)

您需要使用重定向传递会话ID。

还要确保在每个需要会话的页面顶部使用session_start()

答案 2 :(得分:0)

您必须致电

session_start();

在每个页面的第一行,您希望在

中保留会话

答案 3 :(得分:0)

首先尝试使用

<?php session_start();

而不是

<?php
session_start();

如果问题仍然存在,请在 Netbeans 编辑器中打开您的脚本,看看是否在脚本的最开头发现了任何意外的字符。

此外,请确保$ _POST ['session']具有要在$ _SESSION ['session']中指定的值。

答案 4 :(得分:0)

通过以下方式开启错误报告: error_reporting(E_ALL)这可能会导致与您的问题相关的错误。很可能是未定义的索引会话通知。

您应该始终在Super Globals上进行检查。

<?php
session_start();
$_SESSION['session'] = (isset($_POST['session']))?$_POST['session']:null;

header("Location: www.mysite.com/page1.php");
die;
?>

答案 5 :(得分:0)

你的代码似乎是正确的,虽然我很确定$ _POST ['session']是空的。

你应该试试这个:

<?php
session_start();
$_SESSION['session'] = 'John Doe';

header("location: www.mysite.com/page1.php");
?>


<?php
session_start();

echo "Good morning" . $_SESSION['session'];   //returns empty session always.
?>

看看这是否有效。我猜它会。

如果没有,请查看您的Cookie,也许他们已被停用。

然后,如果它有效,我可能因为$_POST['session']为空或空,您确定发布了<input type="text" name="session" />之类的内容吗?