如何检查是不是已输入 session_start? [复制]

Posted

技术标签:

【中文标题】如何检查是不是已输入 session_start? [复制]【英文标题】: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 年前提出的。 参考Check if PHP session has already started 签出this 我总是做@session_start();谁在乎 - 一条线 - 如果它开始了,你不在乎......如果不是,那么现在就是了。有错吗? 【参考方案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();

【讨论】:

这是推荐的方法。 http://www.php.net/manual/en/function.session-status.php 请注意, 【参考方案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 表示仍然没有开始会话,它处于无位置。

以上是关于如何检查是不是已输入 session_start? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

检查 PHP 会话是不是已经开始

致命:错误 - 会话已由session.auto-start或session_start()启动

如何检查输入的电子邮件 ID 是不是已在 Paypal 中注册?

如何从本地的 PHP session_start() 检查不同的变量? [复制]

如何检查某个数据是不是已存在于firestore中

如何检查电子邮件地址是不是已在 iOS 上的 Firebase 中使用?