PHP中恢复session_ID来恢复上次有效会话

在设计登录的模式时,会考虑到让SESSION能够独立于浏览器的行为,那也就是说不会因为关闭了浏览器导致会话失效,这个时候肯定优先使用数据库来存储SESSION相关的内容。

php的session是可以程序恢复的,这个和java不太一样。session的恢复机制可以实现多个应用程序session的共享,因为php的session都是以文件形式或者数据库存储的。首先是session_id的获取是通过session_id()函数获取,这个值可以进行传递。

程序恢复session,首先要知道session_id,大家通过手册可以知道session的恢复通过session_id($id);但是在恢复时要注意一个先后顺序,要得到之前session的内容,必须在session_start()之前执行session_id($id),这样才能在执行了session_start时初始化session的时候恢复到之前的内容,否则的话你得到的是一个空的session,你什么也得不到。之前session被重新初始化了。这个和session_start()的作用有密切关系,因为session_start告诉php,session要初始化,要从session文件中反序列化session内容,所以session_start的作用就是把之前存储的文件内容反序列化。session_start序列化之前要知道session_id,如果没有就生成一个新的session_id。如果有就反序列化相应文件的内容。

通过数据库来存储SESSION后,SESSION就变成了可控的,但是浏览器重新启动后,系统自动分配的PHPSESSID是新的,这时候,我们就可以通过内置的函数来解决,如下,

session_id()

session_id() 存取目前 session 代号的一个内置函数。

语法: string session_id(string [id]);

本函数可取得或者重新配置目前存放 Session 的代号。若无参数 id 则表示只有取得目前 Session 的代号,加上参数则表示将 Session 代号设成新指定的 id。输入及返回均为字符串。

输出 session_id()
<?php
session_start();

echo session_id();
// 输出 xxxxxxx
?>

设置 session_id()
<?php
session_id("hello");
session_start();

echo session_id();
// 输出 hello
?>
相关推荐:
Web 2.0 的发展为网络用户的互动提供了更多机会。用户通过在论坛发表评论,或是在博客发表留言都可能有意或无意输入一些破坏性的内容,从而造成网页不能正常显示,影响其它用户的使用。 XSS 全称为 Cross S …
i (PCRE_CASELESS) 如果设定此修正符,模式中的字符将同时匹配大小写字母。 m(PCRE_MULTILINE) 默认情况下,PCRE 将目标字符串作为单一的一“行”字符所组成的(甚至其中包含有换行符也是如此)。“行起始” …
首先我们来简单地普及下GUID, 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) 。 GUID是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示产 …
其实就是换行符的系统默认常量。 unix系列用 \n windows系列用 \r\n mac用 \r PHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性。 如: <?php echo PHP_EOL; //windows平台相当于 echo "\r\n"; …
拿起手机扫一扫即可带走我!