【问题标题】:PHP creates two different SessionsPHP 创建两个不同的 Session
【发布时间】:2018-05-04 17:35:42
【问题描述】:

我正在处理一个项目并使用 php 会话来存储一些信息。 在一个脚本中,我使用 session_start() 开始会话并创建一些 $_SESSION['var']s。在另一个脚本中,我想获取此变量,但将使用 session_start() 和新的 sessionid 创建一个新会话。 我不确定那里发生了什么。为什么会在一个项目中创建两个不同的会话。如何解决?

一些php配置参数:

session.use_cookies = 1
session.use_only_cookies = 1
session.use_trans_sid = 0
expose_phps= On

sessionid 使用 cookie。

最好的问候,

【问题讨论】:

  • 发生这种情况的原因有很多。如果您的某些页面以 www 为前缀,而有些则没有,则服务器会将它们解释为不同的网站,并分配不同的会话。如果您的网站的一部分使用 SSL 而一部分不使用,它们也可以有不同的会话。如果最终用户使用不同的浏览器或设备,他们将有不同的会话。无法判断您的问题中是否适用。
  • 感谢支持,只有一个域名,不同目录,SSL暂时没有使用。在其他域的其他服务器上,代码运行良好,也许有一些配置问题?
  • 在您的浏览器控制台中,检查 cookie,并查看它们是否具有不同的 PHPSESSID 哈希值。这将揭示您的问题可能是服务器配置问题(如果它们不同),还是代码逻辑问题(如果不是)。如果它们相同,可能仍然是代码逻辑的问题,但可能性要小得多。
  • 作为一般规则,始终使用 www 或始终排除它通常是一个好主意,因此您可以在所有情况下完全排除它是原因。例如,如果您想始终包含它,您可以使用 like this。

标签: php session sessionid session-management


【解决方案1】:
<?php    
session_id("session1");
session_start();
echo session_id();
$_SESSION["name"] = "1";
echo "<pre>", print_r($_SESSION, 1), "</pre>";
session_write_close();

session_id("session2");
echo session_id();
session_start();
$_SESSION["name"] = "2";
echo "<pre>", print_r($_SESSION, 1), "</pre>";
session_write_close();

session_id("session1");
echo session_id();
session_start();
echo "<pre>", print_r($_SESSION, 1), "</pre>";
session_write_close();

session_id("session2");
echo session_id();
session_start();
echo "<pre>", print_r($_SESSION, 1), "</pre>"; ?>

输出:

  session1

Array
(
    [name] => 1
)

session2

Array
(
    [name] => 2
)

session1

Array
(
    [name] => 1
)

session2

Array
(
    [name] => 2
)

你可以试试这个方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 2018-06-10
    • 2014-05-18
    相关资源
    最近更新 更多