【问题标题】:php session always created on refreshphp 会话总是在刷新时创建
【发布时间】:2014-12-29 06:45:45
【问题描述】:

我是 PHP 新手,所以有一个非常基本的问题 我创建一个页面 我最初使用用户 ID 和密码创建一个页面,一旦输入用户 ID 和密码并单击提交,就会调用 AJAX 来验证数据库。 验证完成后,我想刷新向用户显示更多选项的页面 我正在考虑使用会话 但是每次我刷新页面时都会创建一个新会话 我把它放在页面顶部作为测试,当按下 F5 时,我总是在页面顶部看到“新会话”

<?php
if (!isset($_SESSION)){
    session_start();
    echo("new session");
}
else
{
    echo("old session");
}
?>

【问题讨论】:

  • 我认为您误解了 session_start 的作用。从文档中:“session_start() 根据通过 GET 或 POST 请求或通过 cookie 传递的会话标识符创建会话或恢复当前会话。”
  • $_SESSION 在调用session_start() 之前永远不会被设置。您应该在每个启用会话的页面顶部调用session_start()。它不会覆盖现有会话。相反,它将使您可以访问用户的当前会话,或者如果尚不存在则创建一个。如果要显式启动新会话,请先使用session_destroy(),然后使用session_start()

标签: php ajax session


【解决方案1】:

来自 php.net:

session_start — Start new or resume existing session

这意味着您必须使用

开始您的会话
session_start();

在每一页的第一行,它将开始或恢复它。检查 php.net manual,它将帮助您了解如何正确处理和检查会话。

【讨论】:

    【解决方案2】:

    session_start 必须始终在与会话相关的任何内容之前调用。调用后可以获取或设置$_SESSION变量的值。

    Reference.

    你的代码应该是:

    <?php
    session_start(); // always call this at top
    if (!isset($_SESSION['has_been_here'])){
        $_SESSION['has_been_here'] = true;
        echo("new session");
    }
    else
    {
        echo("already been here");
    }
    ?>
    

    【讨论】:

    • 非常感谢,这回答了我的问题。现在我遇到了一个新问题。我有一个在提交后调用的 AJAX。
    • 开始另一个问题
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2014-09-02
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多