### PHP 中使用无限生命期 Session 的方法

在 PHP4.0 中加入了对 Session 的支持，方便了我们很多程序，比如购物车等等！
在很多论坛中，Session 也用于处理用户的登陆，记录下用户名和密码，使得用户不必每次都输入自己的用户名和密码！但是一般的 Session 的生命期有限，如果用户关闭了浏览器，就不能保存 Session 的变量了！那么怎么样可以实现 Session 的永久生命期呢？
大家知道，Session 储存在服务器端，根据客户端提供的 SessionID 来得到这个用户的文件，然后读取文件，取得变量的值，SessionID 可以使用客户端的 Cookie 或者 Http1.1 协议的 Query_String（就是访问的 URL 的“?”后面的部分）来传送给服务器，然后服务器读取 Session 的目录……
要实现 Session 的永久生命期，首先需要了解一下 php.ini 关于 Session 的相关设置（打开 php.ini 文件，在“[Session]”部分）：
1、session.use_cookies：默认的值是“1”，代表 SessionID 使用 Cookie 来传递，反之就是使用 Query_String 来传递；
2、session.name：这个就是 SessionID 储存的变量名称，可能是 Cookie，也可能是 Query_String 来传递，默认值是“PHPSESSID”；
3、session.cookie_lifetime：这个代表 SessionID 在客户端 Cookie 储存的时间，默认是 0，代表浏览器一关闭 SessionID 就作废……就是因为这个所以 Session 不能永久使用！
4、session.gc_maxlifetime：这个是 Session 数据在服务器端储存的时间，如果超过这个时间，那么 Session 数据就自动删除！
还有很多的设置，不过和本文相关的就是这些了，下面开始讲使用永久 Session 的原理和步骤。
前面说过，服务器通过 SessionID 来读取 Session 的数据，但是一般浏览器传送的 SessionID 在浏览器关闭后就没有了，那么我们只需要人为的设置 SessionID 并且保存下来，不就可以……
如果你拥有服务器的操作权限，那么设置这个非常非常的简单，只是需要进行如下的步骤：
1、把“session.use_cookies”设置为 1，打开 Cookie 储存 SessionID，不过默认就是 1，一般不用修改；
2、把“session.cookie_lifetime”改为正无穷（当然没有正无穷的参数，不过 999999999 和正无穷也没有什么区别）;
3、把“session.gc_maxlifetime”设置为和“session.cookie_lifetime”一样的时间；
设置完毕后，打开编辑器，输入如下的代码：
------------------------------------------------------------------------------------
<?
session_start();
session_register('count');
$count++;
echo $count;
?>
------------------------------------------------------------------------------------
然后保存为“session_check.php”，用浏览器打开“session_check.php”，看看显示的是不是“1”，再关闭浏览器，然后再打开浏览器访问“session_check.php”，如果显示“2”，那么恭喜了，你已经成功；如果失败的话，请检查你前面的设置。
但是如果你没有服务器的操作权限，那就比较麻烦了，你需要通过 PHP 程序改写 SessionID 来实现永久的 Session 数据保存。查查 php.net 的函数手册，可以见到有“session_id”这个函数：如果没有设置参数，那么将返回当前的 SessionID，如果设置了参数，就会将当前的 SessionID 设置为给出的值……
只要利用永久性的 Cookie 加上“session_id”函数，就可以实现永久 Session 数据保存了！
但是为了方便，我们需要知道服务器设置的“session.name”，但是一般用户都没有权限查看服务器的 php.ini 设置，不过 PHP 提供了一个非常好的函数“phpinfo”，利用这个可以查看几乎所有的 PHP 信息！
------------------------------------------------------------------------------------
<title>PHP 相关信息显示</title>
<?phpinfo()?>
------------------------------------------------------------------------------------
打开编辑器，输入上面的代码，然后在浏览器中运行这个程序，会见到 PHP 的相关信息（如图 1 所示）。其中有一项“session.name”的参数（图中已经标出），这个就是我们需要的服务器“session.name”，一般是“PHPSESSID”。
记下了 SessionID 的名称后，我们就可以实现永久的 Session 数据储存了！
打开编辑器，输入下面的代码：
------------------------------------------------------------------------------------
<?
session_start(); // 启动 Session
session_register('count'); // 注册 Session 变量 Count
if(isset($PHPSESSID)) {
session_id($PHPSESSID);
} // 如果设置了$PHPSESSID，就将 SessionID 赋值为$PHPSESSID，否则生成 SessionID
$PHPSESSID = session_id(); // 取得当前的 SessionID
$count++; // 变量 count 加 1
setcookie('PHPSESSID', $PHPSESSID, time()+3156000); // 储存 SessionID 到 Cookie 中
echo $count; // 显示 Session 变量 count 的值
?>
------------------------------------------------------------------------------------
保存之后，利用和刚才拥有服务器权限时候的检测一样的方法，检测是否成功的保存了 SessionID。