【问题标题】:PHP session variables not accessable after refresh刷新后无法访问 PHP 会话变量
【发布时间】:2014-11-17 21:12:33
【问题描述】:

这段代码有一个逻辑问题:

<?php
if(isset($_POST['submit'])) {
    if($_POST['username'] != "" && $_POST['password'] != "") {
        $_SESSION["user"] = new User();
        $_SESSION["user"]->login($_POST['username'], $_POST['password']);
    }
}
?>

但是刷新页面后,会话是空的。 有人知道为什么会话可能是空的吗?登录功能正常工作(在每次重新加载页面时使用固定登录数据对其进行测试)。

提前致谢!

【问题讨论】:

  • 你在任何地方都使用session_start吗?

标签: php session cookies login


【解决方案1】:

如果您在会话中存储一个对象,您需要确保在调用 session_start() 之前之前定义了该类(或在自动加载器中可用),否则 PHP 将不会被调用能够反序列化对象。

请参阅http://php.net/manual/en/oop4.serialization.php 了解更多信息。

【讨论】:

    【解决方案2】:

    可能您忘记开始会话了, 添加

    session_start();
    

    在使用任何会话变量之前。

    【讨论】:

    • 我没有忘记这一行,它在文档的顶部
    • 也许你的代码中的某个地方正在破坏会话,只需调试它。
    • 已经在寻找 session_destroy(),但我从未使用过。
    • 你能把print_r($_SESSION) 放在session_start(); 的下面,并在最后验证代码中是否一切正常
    【解决方案3】:

    您必须在要访问$_SESSION 变量的每个文件的开头使用session_start();。否则它将不起作用,因为 PHP 不会自己初始化会话。

    你应该这样写:

    <?php
    session_start();
    
    //your code ;)
    
    ?>
    

    希望对你有帮助;)

    【讨论】:

    • 我没有忘记这一行:/
    • 您的登录表单是什么样的?
    • &lt;form method="POST" action=""&gt; &lt;table&gt; &lt;tr&gt;&lt;td&gt;Benutzername&lt;/td&gt;&lt;td&gt;&lt;input type="text" name="username" /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;Passwort&lt;/td&gt;&lt;td&gt;&lt;input type="password" name="password" /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;input type="submit" value="login" name="submit" /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;/table&gt; &lt;/form&gt; 这是我的登录表单
    • 您能否尝试删除第 2 行中第一个 if 语句的第二个右括号并重新测试?
    • 这不是真的:包含的文件不需要自己的 session_start()。对于每个请求,您在开始时需要一个 session_start()。
    猜你喜欢
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    相关资源
    最近更新 更多