检查PHP会话是否已经开始
我有一个PHP文件,有时从启动会话的页面调用该文件,有时从没有会话启动的页面调用该文件。 因此,当我在此脚本上使用session_start()
,有时会收到“会话已开始”的错误消息。 为此,我放置了以下几行:
if(!isset($_COOKIE["PHPSESSID"]))
{session_start();
}
但是这次我收到了以下警告消息:
注意:未定义的变量:_SESSION
有没有更好的方法来检查会话是否已经开始?
如果我使用@session_start
它将使一切正常运行,只是关闭警告?
#1楼
PHP 5.4引入了session_status() ,它比依赖session_id()
更可靠。
考虑以下代码段:
session_id('test');
var_export(session_id() != ''); // true, but session is still not started!
var_export(session_status() == PHP_SESSION_ACTIVE); // false
因此,要检查会话是否已启动,现在建议使用PHP 5.4:
session_status() == PHP_SESSION_ACTIVE
#2楼
不确定这种解决方案的效率,但这是来自正在运行的项目。如果需要定义默认语言,也可以使用此方法
/*** Start session* Fall back to ukrainian language*/function valid_session() {if(session_id()=='') {session_start();$_SESSION['lang']='uk';$_SESSION['lang_id']=3;}return true;}
#3楼
您可以做到这一点,而且非常容易。
if (!isset($_SESSION)) session_start();
希望能帮助到你 :)
#4楼
在PHP 5.4之前,除了设置全局标志之外,没有其他可靠的方法。
考虑:
var_dump($_SESSION); // null
session_start();
var_dump($_SESSION); // array
session_destroy();
var_dump($_SESSION); // array, but session isn't active.
要么:
session_id(); // returns empty string
session_start();
session_id(); // returns session hash
session_destroy();
session_id(); // returns empty string, ok, but then
session_id('foo'); // tell php the session id to use
session_id(); // returns 'foo', but no session is active.
因此,在PHP 5.4之前,您应该设置一个全局布尔值。
#5楼
PHP> = 5.4.0和PHP 7版本的推荐方法
if (session_status() == PHP_SESSION_NONE) {session_start();
}
参考: http : //www.php.net/manual/en/function.session-status.php
对于PHP <5.4.0版本
if(session_id() == '') {session_start();
}
#6楼
在PHP 5.3上,这对我有效:
if(!strlen(session_id())){session_name('someSpecialName');session_start();
}
那么你有。 如果您不将not at if语句放在开头,那么会话将以任何方式开始,我不这样做。
#7楼
您唯一需要做的是:
<?php
if(!isset($_SESSION))
{
session_start();
}
?>
#8楼
对于所有PHP版本
if ((function_exists('session_status') && session_status() !== PHP_SESSION_ACTIVE) || !session_id()) {session_start();
}
#9楼
if (session_id() === "") { session_start(); }
希望能帮助到你 !
#10楼
这应该适用于所有PHP版本。 它确定PHP版本,然后检查是否基于PHP版本启动了会话。 然后,如果会话未启动,它将启动它。
function start_session() {if(version_compare(phpversion(), "5.4.0") != -1){if (session_status() == PHP_SESSION_NONE) {session_start();}} else {if(session_id() == '') {session_start();}}
}
#11楼
检查一下:
<?php
/**
* @return bool
*/
function is_session_started()
{if ( php_sapi_name() !== 'cli' ) {if ( version_compare(phpversion(), '5.4.0', '>=') ) {return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE;} else {return session_id() === '' ? FALSE : TRUE;}}return FALSE;
}// Example
if ( is_session_started() === FALSE ) session_start();
?>
来源http://php.net
#12楼
if (version_compare(phpversion(), '5.4.0', '<')) {if(session_id() == '') {session_start();}}else{if (session_status() == PHP_SESSION_NONE) {session_start();}}
#13楼
session_start();
if(!empty($_SESSION['user']))
{ //code;
}
else
{header("location:index.php");
}
#14楼
PHP_VERSION_ID自PHP 5.2.7起可用,因此请首先进行检查,必要时进行创建。 session_status
自PHP 5.4起可用,因此我们也必须进行检查:
if (!defined('PHP_VERSION_ID')) {$version = explode('.', PHP_VERSION);define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
}else{$version = PHP_VERSION_ID;
}
if($version < 50400){if(session_id() == '') {session_start();}
}else{if (session_status() !== PHP_SESSION_ACTIVE) {session_start();}
}
#15楼
响应基于@Meliza Ramos响应(请参阅第一个响应)和http://php.net/manual/zh/function.phpversion.php ,
动作:
- 定义PHP_VERSION_ID(如果不存在)
- 定义函数以根据PHP_VERSION_ID检查版本
- 定义函数以确保openSession()安全
只使用openSession()
// PHP_VERSION_ID is available as of PHP 5.2.7, if our// version is lower than that, then emulate itif (!defined('PHP_VERSION_ID')) {$version = explode('.', PHP_VERSION);define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));// PHP_VERSION_ID is defined as a number, where the higher the number// is, the newer a PHP version is used. It's defined as used in the above// expression://// $version_id = $major_version * 10000 + $minor_version * 100 + $release_version;//// Now with PHP_VERSION_ID we can check for features this PHP version// may have, this doesn't require to use version_compare() everytime// you check if the current PHP version may not support a feature.//// For example, we may here define the PHP_VERSION_* constants thats// not available in versions prior to 5.2.7if (PHP_VERSION_ID < 50207) {define('PHP_MAJOR_VERSION', $version[0]);define('PHP_MINOR_VERSION', $version[1]);define('PHP_RELEASE_VERSION', $version[2]);// and so on, ...}}function phpVersionAtLeast($strVersion = '0.0.0'){$version = explode('.', $strVersion);$questionVer = $version[0] * 10000 + $version[1] * 100 + $version[2];if(PHP_VERSION_ID >= $questionVer)return true;elsereturn false;}function openSession(){if(phpVersionAtLeast('5.4.0')){if(session_status()==PHP_SESSION_NONE)session_start();}else // under 5.4.0{if(session_id() == '')session_start();}}
#16楼
if (version_compare(PHP_VERSION, "5.4.0") >= 0) {$sess = session_status();if ($sess == PHP_SESSION_NONE) {session_start();}
} else {if (!$_SESSION) {session_start();}
}
实际上,现在解决该问题现在为时已晚,现在在这里进行解释。 这是我的一个项目的.inc文件,您可以在其中通过选择菜肴并删除/添加或更改订单来为餐厅配置菜单。 我正在使用的服务器没有实际版本,因此使它更加灵活。 这取决于作者希望使用并尝试一下。
#17楼
替换session_start();
与:
if (!isset($a)) {a = False;if ($a == TRUE) {session_start();$a = TRUE;}
}
#18楼
该代码段对您有用吗?
if (!count($_SESSION)>0) {session_start();
}
#19楼
这就是我用来确定会话是否已开始的内容。 通过使用empty和isset,如下所示:
if (empty($_SESSION) && !isset($_SESSION)) {session_start();
}
#20楼
根据我的实践,在访问$_SESSION[]
您需要每次都调用session_start
来使用脚本。 请参见下面的链接以获取手册。
http://php.net/manual/zh/function.session-start.php
对我而言,至少session_start
作为名称令人困惑。 session_load
可以更清楚。
#21楼
我最终仔细检查了状态。 PHP 5.4以上
if(session_status() !== PHP_SESSION_ACTIVE){session_start();};
if(session_status() !== PHP_SESSION_ACTIVE){die('session start failed');};
#22楼
您可以使用以下解决方案来检查PHP会话是否已经启动:
if(session_id()== '')
{echo"Session isn't Start";
}
else
{echo"Session Started";
}
#23楼
在函数调用之前禁止@
抑制在函数调用期间可能报告的任何错误。
在session_start
之前添加一个@
告诉PHP避免打印错误消息。
例如:
在已经向浏览器中打印了某些内容后使用session_start()
会导致错误,因此PHP将显示类似“无法发送标头:从(第12行)开始”的内容,在这种情况下@session_start()
仍然会失败,但是错误消息未打印在屏幕上。
在包含文件或重定向到新页面之前,请使用exit()
函数,否则会产生错误。
此代码可在所有情况下使用:
<?php if (session_status() !== PHP_SESSION_ACTIVE || session_id() === ""){session_start(); }?>
#24楼
对于PHP 5.4.0之前的PHP版本:
if(session_id() == '') {// session isn't started
}
但是,恕我直言,如果您不知道是否启动会话,则应该考虑重构会话管理代码。
就是说,我的意见是主观的,在某些情况下(以下示例中描述了这些示例),可能无法知道会话是否开始。
#25楼
您应该重新组织代码,以便每个页面执行一次完全调用session_start()
。
#26楼
使用session_id() ,如果未设置,则返回空字符串。 比检查$_COOKIE
更可靠。
if (strlen(session_id()) < 1) {session_start();
}
检查PHP会话是否已经开始相关推荐
- Django源码分析5:session会话中间件分析
django源码分析 本文环境python3.5.2,django1.10.x系列 1.这次分析django框架中的会话中间件. 2.会话保持是目前框架都支持的一个功能,因为http是无状态协议,无法 ...
- matlab清除所有数据,清除仿真数据检查器中的所有数据
将数据记录到仿真数据检查器 此示例将模型 slexAircraftExample 的仿真数据记录到仿真数据检查器.该模型未配置为记录数据.加载该模型,并标记 Stick.alpha, rad 和 q, ...
- zookeeper系列(九)zookeeper的会话详解
作者:leesf 掌控之中,才会成功:掌控之外,注定失败. 出处:http://www.cnblogs.com/leesf456/p/6103870.html尊重原创,大家共同学习: 一.前言 ...
- 拼写检查工具是android,拼写检查工具框架 | Android 开发者 | Android Developers...
Android 平台提供了拼写检查工具框架,可让您在应用中实现和使用拼写检查功能.该框架是 Android 平台提供的文本服务 API 之一. 如需在您的应用中使用该框架,您需要创建一个特殊类型的 A ...
- 网络分流器-TCP报文重组和会话规则-网络分流器
戎腾网络网络分流器又名核心网采集器,又分为固网采集器和移动信令采集器两大类!网络分流器是整个网络安全前端网络监控的重要基础装备! 我们在网络安全当中经常听到旁路,镜像,流量采集,DPI深度数据包检测, ...
- windows配置检查
文章目录 2.1 账号口令 2.1.1 检查是否已正确配置密码最长使用期限 2.1.2 检查是否已正确配置密码长度最小值 2.1.3 检查是否已正确配置"强制密码历史" 2.1.4 ...
- 网络分流器-网络分流器-TCP重组和会话规则
戎腾网络网络分流器又名核心网采集器,又分为固网采集器和移动信令采集器两大类!网络分流器是整个网络安全前端网 络 监控的重要基础装备! 我们在网络安全当中经常听到旁路,镜像,流量采集,DPI深度数据包检 ...
- RFC3261 SIP 会话初始化 规范 中文版
1.SIP协议介绍 Internet的许多应用都需要建立和管理一个会话,会话在这里的含义是在参与者之 间的数据的交换.由于考虑到参与者的实际情况,这些应用的实现往往是很复杂的:参与者可能是在代理间移动 ...
- android 调用相机ar,在Android上录制并播放AR会话
通过Recording&Playback API,您可以在给定的环境中记录一次视频和AR数据,并使用该内容替换实时摄像头会话. 先决条件 在继续之前,请确保您了解基本的AR概念以及如何配置AR ...
最新文章
- (转)mongodb分片
- 美多商城之购物车(展示商品页面简单购物车)
- 抖音小程序微信小程序五角星型评分插件自定义分数组件
- hadoop: Shuffle过程详解 (转载)
- linux内核合并dtb文件,c – 如何修改内核DTB文件
- 移动端h5 顶部菜单栏_HTML5 移动端上 动态固定菜单栏的问题
- Caffe + Ubuntu 15.04/16.04 + CUDA 7.5/8.0 在服务器上安装配置及卸载重新安装(已测试可执行)
- 用window.location.href实现页面跳转
- 入门 | egg.js 入门之egg-jwt
- OPENGL中的glViewport
- 刚刚接触视频剪辑,怎么快速剪视频?
- Caffe学习3:Layer
- 编译OpenJDK8:NMAKE : fatal error U1077
- 2018年,免费、无水印录屏软件有哪些?
- 模糊综合评价模型 ——第三部分,一级模糊综合评价模型应用:例题1,对员工进行年终综合评定
- 助老服务机器人结构设计
- word如何用制表符对齐公式
- linux用户motd,linux修改motd,提供个性化login信息
- 吉祥物,送吉祥(续更)
- 购买服务器的个人经验
热门文章
- Activity栈管理(一):Activity任务栈模型
- 解决: is not accessible from java.lang.Class android.app.AppComponentFactory
- 【剑指offer-Java版】44扑克牌的顺子
- 第十二周项目一-实现复数类中的运算符重载(1)
- Android socket 编程 实现消息推送
- JQuery EasyUi控件值的获取与设置
- Tomcat配置多个虚拟主机、部署多个项目
- 银行计算机设备管理 总结,【2017年银行自助设备中心年终总结】_银行自助设备工作总结...
- mysql 左连接b表的一条数据_如果你正在找MySQL精品资源,那来这里看看
- GAN属于计算机视觉领域嘛_计算机视觉领域必知的开放数据集