是否有一个简短的代码技巧来检查会话是否已经开始,如果没有,然后加载一个?目前我收到一个错误“会话已经开始......”,如果我将会话启动,无论检查。仅当会话不存在时才加载session_start()?
回答
isset
通常是检查的预定义变量当前定义的正确方法:
如果您使用的是PHP的版本之前5.4,
,通常可以用其诱人的逃脱只是执行下面的代码,但请注意,如果由于某些原因会话被禁用,session_start()仍然会被调用,最终会导致错误和不必要的调试,因为不允许创建$ _SESSION数组。
if(!isset($_SESSION)){session_start();}
如果你想占检查是否会话被禁用出于某种原因
,你可以禁止该错误消息,设置测试会话变量,并验证它被设置。如果不是,您可以在禁用会话的反应中进行编码。你需要在脚本开始或接近脚本的时候完成所有这些。因此,作为一个例子(作品不同,这取决于错误处理设置):
if(!isset($_SESSION)){session_start();}
$_SESSION['valid'] = 'valid';
if($_SESSION['valid'] != 'valid')
{
//handle disabled sessions
}
但是,如果你正在使用的PHP版本5.4或更高,
可以使用session_status()功能,一个更好的选择,因为它会占用会话被禁用并检查会话是否已经存在。
if (session_status() === PHP_SESSION_NONE){session_start();}
注意的是PHP_SESSION_NONE是一个常数一套由PHP,因此并不需要被包装在引号中。它的计算结果为整数1,但是作为一个专门用于消除对幻数的需求的常量,最好对常数进行测试。
许多人只是简单地使用@session_start()
来抑制会话已经启动的警告。另一种方法通常是:
if (session_status() === PHP_SESSION_NONE) session_start();
if (session_id() === "") { session_start(); }
尝试这个条件
if (version_compare(phpversion(), '5.4.0', '<')) {
if(session_id() == '') {
session_start();
} }else{
if (session_status() == PHP_SESSION_NONE) {
session_start();
} }
如果你只是想避免错误,函数 例如之前使用@:
@session_start();
您好,欢迎来到SO。您能否编辑您的帖子来解释您的代码的作用以及它如何解决OP的问题?只有代码答案是不鼓励的,并且可能会被删除。 – 2016-06-29 22:59:37
检查现有会话开始之前新:
// # if phpversion() is >= 5.4
if(phpversion() >= 5.4) {
// # check session_status() function for value 'PHP_SESSION_NONE'
if(session_status() === PHP_SESSION_NONE) {
session_start();
}
} else { // # maintain backwards compat. with PHP versions older than 5.4
// # if $_SESSION object if NOT set, start a new session!
if(!isset($_SESSION)) {
session_start();
}
}
- 1. PHP session_start cookie不会保存会话ID
- 2. 仅当文件存在时才加载资源字典
- 3. 仅当emacs elisp库存在时才加载
- 4. 仅当元素进入视口时才会加载图像
- 5. 仅当PostgreSQL表不存在主键时才添加主键
- 6. PHP session_start不会恢复会话
- 7. 仅当php存在时才添加前导零
- 8. 仅当会话存在时弹出访问页面
- 9. 如何仅在加载Google Maps API时才加载jquery插件?
- 10. 仅当子项不存在时,才从父项删除行
- 11. session_start();会话cookie警告
- 12. 仅当插入记录时才会增加身份
- 13. lazyload:仅当它包含图像加载时才显示div
- 14. 仅当图像可见时才加载图像?
- 15. 仅当弹出窗口出现时才加载img
- 16. 仅当加载iframe页面时才显示DIV
- 17. Drupal:仅当页面向下滚动时才加载页面
- 18. Requirejs - 仅当条件为真时才加载模块
- 19. 仅当表中的值不在表中时才加入表格
- 20. 在session_start不会在asp.net
- 21. 仅当Win2D的效果不够时才会使内容变暗?
- 22. 无法仅在视图以角度加载时才加载加载器才能加载。这是循环
- 23. 无法发送会话cookie - 标题已经发出(当在session_start())
- 24. 会话在空白页面上启动会导致错误;在session_start():不能发送会话缓存限制器
- 25. “session_start()”生成新的会话标识,而不是加载可用的会话标识
- 26. 会话值不加载
- 27. 仅当EntityCollection或EntityReference不包含对象时才能调用加载
- 28. 仅当文件保存在某个位置时才会运行JavaScript代码
- 29. PHP会话变量没有被存储(我呼吁在session_start())
- 30. 在session_start()[function.session启动]:无法发送会话缓存限制器
感谢提供解决方案为php <5.4 – Houston 2014-03-19 14:07:39
@nick好吧,我会说你们都发现了一个5.4.16或更可能有一个奇怪的PHP /服务器配置的错误。无论哪种方式,这是很好的kbow他们可能的边缘情况:D – Rooster 2015-11-20 19:01:01