苏南大叔想写一篇有关php的水文,主要说的内容就是sessionsessioncookie是紧密相关的。那么回想一下,苏南大叔的一个曾经的文章伏笔,说客户端禁用cookie的话,session还能使用么?答案是不能使用。大多数情况下,会有个名叫PHPSESSIDcookie,用于表示自己的身份信息。

PHPSESSID这个名字,在php.ini里面是可以修改的。

苏南大叔:php的session使用,疑难杂症及入门使用 - php-session-guide
php的session使用,疑难杂症及入门使用(图4-1)

本文测试环境:mac/php72

基本使用

phpsession,使用方式还是非常简单的。记住一个全局变量名字即可:$_SESSION,它是一个数组。

设置的方式举例如下:

$_SESSION["author"]="sunan";

获取的方式举例如下:

var_dump($_SESSION["author"]);

Undefined variable: _SESSION

php里面的session如何想要正常使用,那么前提是建立在session_start()的基础上的。但是,对于各位新手而言,需要注意的是:session并不是想start就可以start的。如果没有正确start起来session的话,试图读取SESSION信息的时候,就可能会看到下面的类似错误信息:

Notice: Undefined variable: _SESSION in /code/www/php/test2.php on line 4

这个错误是非常匪夷所思的,在第一个php里面刚刚设置好了$_SESSION,到第二个php里面,却报错Undefined variable: _SESSION

苏南大叔:php的session使用,疑难杂症及入门使用 - undefined-variable-session
php的session使用,疑难杂症及入门使用(图4-2)

session_start()

这个错误的产生原因就是:session没有start。那么start的方式方法通常来说,有以下两种方式:

php.ini自动session_start

session.auto_start指定会话模块是否在请求开始时自动启动一个会话。默认为0(不启动)。

php.ini中的默认配置是:

session.auto_start = 0

相关链接是:

php代码主动session_start

当然,单独的一句php语句,也是可以解决问题的。

session_start();

不过苏南大叔推荐您使用更兼容的语句:

if(session_status() !== PHP_SESSION_ACTIVE){
    session_start();
}

苏南大叔:php的session使用,疑难杂症及入门使用 - php-session-code
php的session使用,疑难杂症及入门使用(图4-3)

session存储的方式及位置

session在服务器端来说,默认情况下,是存储在一个服务器端的文件夹里面的。php.ini中的设置是:

session.save_handler = files

相关链接是:

所以,如果session出现了一些什么奇怪的问题的话,可以去看看是不是对应目录出现了什么权限问题。这个位置一般是tmp目录。php.ini中的设置是:

session.save_path = "/tmp"

相关链接是:

苏南大叔:php的session使用,疑难杂症及入门使用 - php-ini-session-savepath
php的session使用,疑难杂症及入门使用(图4-4)

但是,在实际的生产环境里面,有各种各样的理由,去把session存储在其它位置,比如redis、或者mysql当中。这种情况,在苏南大叔的后续文字中,将会做深入讲解。

相关链接

苏南大叔写过几个php下面的cookie文章,鉴于cookiesession之间,这剪不断理还乱的关系,这里苏南大叔就提供几个cookie的相关文章。

总结

对于php里面的session问题,大多数情况下,本文的文字说明就足够使用了。对于将session存储在其它介质里面的情况,苏南大叔将在后续文章里面说明:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接作者。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【加群】加入QQ群【175454274】和大家一起讨论这个问题

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   php    session

本站的忠实读者小伙伴,正在阅读下面这些文章: