【问题标题】:How do i check if session_start has been entered? [duplicate]如何检查是否已输入 session_start? [复制]
【发布时间】:2010-12-19 18:43:58
【问题描述】:

我有一个第三方脚本,想知道如何检查PHP 是否在做某事之前已经声明了session_start()

something like if(isset($_session_start())) { //do something } 

【问题讨论】:

  • 是的,但这是 3 年前提出的。这个问题是 2 年前提出的。
  • 签出this
  • 我总是做@session_start();谁在乎 - 一条线 - 如果它开始了,你不在乎......如果不是,那么现在就是了。有错吗?

标签: php


【解决方案1】:
if(!isset($_SESSION)) {
     session_start();
}

检查将允许您保持当前会话处于活动状态,即使它是一个回送提交应用程序,如果数据输入不正确或在您的程序中进行额外的检查和平衡,然后再继续下一个程序,您计划在其中重复使用表单。

【讨论】:

  • 我建议使用if(session_id() == ''),因为可以在会话关闭时设置$_SESSION
  • 是的,但是在会话开始时所有 $_SESSION['variables'] 都设置为 null。此外, session_id()s 是客户端 cookie 值。如何使用会话数据取决于开发人员。
  • @Maarek 每次调用session_start() 时,会话变量都不会全部设置为空。当会话关闭时(通过退出脚本或调用session_write_close()),会话数据仍然存在。在这种情况下,您的检查是不够的,因为它不会重新启动已关闭的会话。
  • 另外,您可以调用session_start(),然后永远不要设置$_SESSION。因此,您的检查会告诉您从未调用过 session_start(),这是不正确的。
  • 一个有用的答案,如果只有一个会话并且没有太多高级它完成它,但对于更复杂的环境来说不是很好。
【解决方案2】:

在 PHP >= 5.4.0 中,您有函数 session_status() 可以告诉您它是否已初始化或是否已禁用。

例如你可以这样做:

if (session_status() == PHP_SESSION_NONE) {
  session_start();
}

您可以在http://www.php.net/manual/en/function.session-status.php阅读更多相关信息

【讨论】:

    【解决方案3】:

    我想你可以使用session_id 函数:

    session_id() 返回会话 ID 对于当前会话或空 字符串 ("") 如果没有当前 会话(没有当前会话 ID 存在)。

    或者也许测试$_SESSION 是否设置,使用isset 可能会成功,因为它不应该在没有会话开始时设置——你只需要希望没有任何东西分配给@ 987654327@ 没有先开始会话。

    【讨论】:

    • 使用 session_status() 代替 PHP 5.4.0 中的 session_id()。调用 session_write_close() 函数后,$_SESSION 将无法正常工作。
    【解决方案4】:

    对于 php >= 5.4.0

    if (session_status() == PHP_SESSION_NONE) {
    session_start();
    }
    

    对于 php

    if(session_id() == '') {
    session_start();
    }
    

    【讨论】:

    【解决方案5】:
    if(isset($_SESSION)) {
        // do something
    }
    

    【讨论】:

      【解决方案6】:
      function session_started(){ return !!session_id(); }
      

      【讨论】:

      • 别太聪明了;)。我更喜欢'return (session_id() !=="")'。
      【解决方案7】:

      如果会话已经开始, 错误:“致命错误:无法在写入上下文中使用函数返回值”

      试试这个:

      $session = session_id();
      if(empty($session)){ 
          session_start();
      }
      

      【讨论】:

        【解决方案8】:

        我只是为它写了一个简单的函数。

          function isSessionStart ()
          {
            if (version_compare(phpversion(), '5.4.0', '<')) {
              if(session_id() == '') {
                return false;
              }
              return true;
            }
            else {
              if (session_status() == PHP_SESSION_NONE) {
                return false;
              }
              return true;
            }
          }
        

        【讨论】:

          【解决方案9】:
          
              if(defined('SID'))
                  // do
          

          【讨论】:

            【解决方案10】:

            最适合我的方式! 如果(会话状态()!= 1) session_start();

            【讨论】:

            • 1 表示仍然没有开始会话,它处于无位置。
            猜你喜欢
            • 1970-01-01
            • 2018-01-29
            • 2011-01-01
            • 1970-01-01
            • 2011-11-12
            • 2015-08-17
            • 1970-01-01
            • 2018-06-18
            相关资源
            最近更新 更多