PHP5有很多值得学习的地方,这里我们主要介绍PHP5 Session的使用,Session 是如何来判断客户端用户的呢?它是通过 Session ID 来判断的,什么是 Session ID,就是那个 Session 文件的文件名,Session ID 是随机生成的,因此能保证***性和随机性,确保Session 的安全。一般如果没有设置 Session 的生存周期,则 Session ID 存储在内存中,关闭浏览器后该 ID 自动注销,重新请求该页面后,重新注册一个 Session ID。
如果客户端没有禁用 Cookie,则 Cookie 在启动 Session 会话的时候扮演的是存储 Session ID 和 Session 生存期的角色。我们来手动设置 Session 的生存期:
- <?php
- session_start();
- // 保存一天
- $lifeTime = 24 * 3600;
- setcookie(session_name(), session_id(), time() + $lifeTime, "/");
- ?>
其实PHP5 Session还提供了一个函数 session_set_cookie_params(); 来设置PHP5 Session的生存期的,该函数必须在 session_start() 函数调用之前调用:
- <?php
- // 保存一天
- $lifeTime = 24 * 3600;
- session_set_cookie_params($lifeTime);
- session_start();
- $_SESSION["admin"] = true;
- ?>
#T#如果客户端使用 IE 6.0 , session_set_cookie_params(); 函数设置 Cookie 会有些问题,所以我们还是手动调用 setcookie 函数来创建 cookie。假设客户端禁用 Cookie 怎么办?没办法,所有生存周期都是浏览器进程了,只要关闭浏览器,再次请求页面又得重新注册 Session。那么怎么传递 Session ID 呢?通过 URL 或者通过隐藏表单来传递,PHP 会自动将 Session ID 发送到 URL 上,URL 形如:http://www.openphp.cn /index.php?PHPSESSID=bba5b2a240a77e5b44cfa01d49cf9669,其中 URL 中的参数 PHPSESSID 就是 Session ID了,我们可以使用 $_GET 来获取该值,从而实现 Session ID 页面间传递。
- <?php
- // 保存一天
- $lifeTime = 24 * 3600;
- // 取得当前 Session 名,默认为 PHPSESSID
- $sessionName = session_name();
- // 取得 Session ID
- $sessionID = $_GET[$sessionName];
- // 使用 session_id() 设置获得的 Session ID
- session_id($sessionID);
- session_set_cookie_params($lifeTime);
- session_start();
- $_SESSION["admin"] = true;