【问题标题】:How not exec a session when started? [duplicate]启动时如何不执行会话? [复制]
【发布时间】:2021-07-18 13:15:12
【问题描述】:

我有这种情况:

if ( 
    session_status() === PHP_SESSION_NONE
) {
    echo "session not exist";
    session_start();
} else {
    echo "session exist";
}

第二次重新加载页面时,它也总是返回"session not exist"。我该如何解决?

【问题讨论】:

  • 在session_status()行前有session_start();吗?
  • 必须启动会话才能让代码访问它...每次代码运行时。
  • 当然不!我只用它清理了一个 php 文件。 @LouysPatriceBessette:实际情况略有不同。我只想创建一个 session_id 但只有在会话未启动时才需要生成它。
  • 听起来你有an X/Y Problem:你认为检查 session_status() 会帮助你完成真正的任务,但事实并非如此。所以回到你实际尝试做的事情,并寻找其他解决方案。
  • 检查会话是否已启动的简单方法是stackoverflow.com/a/64335687/1213708

标签: php


【解决方案1】:

我认为您的困惑与session_start() 的含义有关。如果它意味着“为该用户启动会话”,您的代码将起作用,但它的实际含义更像是“启动会话机制”。或者,正如the PHP manual page for it 所说:

session_start() 根据通过 GET 或 POST 请求或通过 cookie 传递的会话标识符创建会话或恢复当前会话。

session_status()返回的状态基本就是说“你还没有打电话给session_start()”。

【讨论】:

  • 没错!我想要这个:如果会话未开始,则为 session_id() 设置自定义值并启动会话,否则不做任何事情。当我在 session_start() 之前生成 session_id() 时,它需要保留。
  • 只有在会话未启动时才需要执行 session_id()。但在这种情况下,IF 的条件始终为真。要重新加载页面,它应该是错误的。
  • @MarcelloImpastato 重新加载页面仍然从新的 PHP 执行开始,其中尚未调用 session_start() 方法(对于那个确切的 PHP 执行)。除非您启用了session.auto_start,否则您的 PHP 脚本将以会话 not 开始(尚未)开始。查看session_start(); 的文档如何/何时应该/必须使用它。
  • @Progman:当然。但是,如果我在更改 session_id 有问题后开始会话。需要在开始会话之前进行设置。为此,我想找到一个关于我想做的一些正确条件的解决方案。
  • @MarcelloImpastato 你已经做到了。当session_status() 返回NONE 时,你知道你还没有调用session_start(),所以你可以调用session_id() 来设置会话ID。
猜你喜欢
  • 2016-11-07
  • 2014-01-25
  • 1970-01-01
  • 2015-10-22
  • 2021-09-22
  • 2016-12-24
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
相关资源
最近更新 更多