如何检查是不是已输入 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? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
致命:错误 - 会话已由session.auto-start或session_start()启动
如何检查输入的电子邮件 ID 是不是已在 Paypal 中注册?