我有一个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会话是否已经开始相关推荐

  1. Django源码分析5:session会话中间件分析

    django源码分析 本文环境python3.5.2,django1.10.x系列 1.这次分析django框架中的会话中间件. 2.会话保持是目前框架都支持的一个功能,因为http是无状态协议,无法 ...

  2. matlab清除所有数据,清除仿真数据检查器中的所有数据

    将数据记录到仿真数据检查器 此示例将模型 slexAircraftExample 的仿真数据记录到仿真数据检查器.该模型未配置为记录数据.加载该模型,并标记 Stick.alpha, rad 和 q, ...

  3. zookeeper系列(九)zookeeper的会话详解

    作者:leesf    掌控之中,才会成功:掌控之外,注定失败. 出处:http://www.cnblogs.com/leesf456/p/6103870.html尊重原创,大家共同学习: 一.前言 ...

  4. 拼写检查工具是android,拼写检查工具框架  |  Android 开发者  |  Android Developers...

    Android 平台提供了拼写检查工具框架,可让您在应用中实现和使用拼写检查功能.该框架是 Android 平台提供的文本服务 API 之一. 如需在您的应用中使用该框架,您需要创建一个特殊类型的 A ...

  5. 网络分流器-TCP报文重组和会话规则-网络分流器

    戎腾网络网络分流器又名核心网采集器,又分为固网采集器和移动信令采集器两大类!网络分流器是整个网络安全前端网络监控的重要基础装备! 我们在网络安全当中经常听到旁路,镜像,流量采集,DPI深度数据包检测, ...

  6. windows配置检查

    文章目录 2.1 账号口令 2.1.1 检查是否已正确配置密码最长使用期限 2.1.2 检查是否已正确配置密码长度最小值 2.1.3 检查是否已正确配置"强制密码历史" 2.1.4 ...

  7. 网络分流器-网络分流器-TCP重组和会话规则

    戎腾网络网络分流器又名核心网采集器,又分为固网采集器和移动信令采集器两大类!网络分流器是整个网络安全前端网 络 监控的重要基础装备! 我们在网络安全当中经常听到旁路,镜像,流量采集,DPI深度数据包检 ...

  8. RFC3261 SIP 会话初始化 规范 中文版

    1.SIP协议介绍 Internet的许多应用都需要建立和管理一个会话,会话在这里的含义是在参与者之 间的数据的交换.由于考虑到参与者的实际情况,这些应用的实现往往是很复杂的:参与者可能是在代理间移动 ...

  9. android 调用相机ar,在Android上录制并播放AR会话

    通过Recording&Playback API,您可以在给定的环境中记录一次视频和AR数据,并使用该内容替换实时摄像头会话. 先决条件 在继续之前,请确保您了解基本的AR概念以及如何配置AR ...

最新文章

  1. (转)mongodb分片
  2. 美多商城之购物车(展示商品页面简单购物车)
  3. 抖音小程序微信小程序五角星型评分插件自定义分数组件
  4. hadoop: Shuffle过程详解 (转载)
  5. linux内核合并dtb文件,c – 如何修改内核DTB文件
  6. 移动端h5 顶部菜单栏_HTML5 移动端上 动态固定菜单栏的问题
  7. Caffe + Ubuntu 15.04/16.04 + CUDA 7.5/8.0 在服务器上安装配置及卸载重新安装(已测试可执行)
  8. 用window.location.href实现页面跳转
  9. 入门 | egg.js 入门之egg-jwt
  10. OPENGL中的glViewport
  11. 刚刚接触视频剪辑,怎么快速剪视频?
  12. Caffe学习3:Layer
  13. 编译OpenJDK8:NMAKE : fatal error U1077
  14. 2018年,免费、无水印录屏软件有哪些?
  15. 模糊综合评价模型 ——第三部分,一级模糊综合评价模型应用:例题1,对员工进行年终综合评定
  16. 助老服务机器人结构设计
  17. word如何用制表符对齐公式
  18. linux用户motd,linux修改motd,提供个性化login信息
  19. 吉祥物,送吉祥(续更)
  20. 购买服务器的个人经验

热门文章

  1. Activity栈管理(一):Activity任务栈模型
  2. 解决: is not accessible from java.lang.Class android.app.AppComponentFactory
  3. 【剑指offer-Java版】44扑克牌的顺子
  4. 第十二周项目一-实现复数类中的运算符重载(1)
  5. Android socket 编程 实现消息推送
  6. JQuery EasyUi控件值的获取与设置
  7. Tomcat配置多个虚拟主机、部署多个项目
  8. 银行计算机设备管理 总结,【2017年银行自助设备中心年终总结】_银行自助设备工作总结...
  9. mysql 左连接b表的一条数据_如果你正在找MySQL精品资源,那来这里看看
  10. GAN属于计算机视觉领域嘛_计算机视觉领域必知的开放数据集