|
主要转自以下强文,稍做修改。 1. http://www.phpchina.com/html/51/8051_itemid_2994.html 2. http://www.eb163.com/article.php?id=75&PHPSESSID=d226cc07cec0580ec7dad47119ee4667 1.PHP session 工作原理
Session文件储存于服务器端,,默认情况下SESSION 文件保存的目录由session.save_path 指定,文件名以 sess_ 为前缀,后跟 SESSION ID,如:sess_c72665af
当代码session_start();运行的时候,就在服务器上产生了一个session文件,随之也产生了与之唯一对应的一个session id,定义session变量以一定形式存储在刚才产生的session文件中。通过session id,可以取出定义的变量。跨页后,为了使用session,你必须又执行session_start();将又会产生一个session文件,与之对应产生相应的session id,用这个session id是取不出前面提到的第一个session文件中的变量的,因为这个session id不是打开它的“钥匙”。如果在session_start();之前加代码session_id($session id);将不产生新的session文件,直接读取与这个id对应的session文件。
2. Session常见函数及用法
2.1 Session_start(): 开始一个会话或者返回已经存在的会话。
这个函数没有参数,且返回值均为true。如果你使用基于cookie的session,那么在使用Session_start()之前浏览器不能有任何输出.可以在php.ini里启动session.auto_start=1,这样就无需每次使用session之前都要调用session_start()。但启用该选项也有一些限制,如果确实启用了 session.auto_start,则不能将对象放入会话中,因为类定义必须在启动会话之前加载以在会话中重建对象。
2.2 注册SESSION变量 : PHP5使用$_SESSION[‘xxx’]=xxx注册SESSION全局变量。注意 session_register(), session_unregister ,session_is_registered在php5下不再使用,除非在php.ini里把 register_globle设为on,不过出于安全考虑,强烈建议关闭register_globle。 HTTP_SESSION_VARS也不提倡使用了,官方建议用$_SESSION代替之。
Page1.php
//如果客户端支持cookie,可通过该链接传递session到下一页。
//客户端不支持cookie时,使用该办法传递session.
echo $_SESSION['passwd']; echo date('Y m d H:i:s', $_SESSION['time']);
2.3 session_id ([ string $id ] ):Get and/or set the current session id
php5中既可以使用session_id(),也可以通过附加在url上的SID取得当前会话的session_id和session_name。 如果session_id()有具体指定值的话(即指定了参数$id),将取代当前的session_id值。使用该函数前必须启动会话:session_start();
例子:手动设置 Session 的生存期: <?php session_start(); // 保存一天 $lifeTime = 24 * 3600; setcookie(session_name(), session_id(), time() + $lifeTime, "/"); ?> 其实 Session 还提供了一个函数 session_set_cookie_params(); 来设置 Session 的生存期的,该函数必须在 session_start() 函数调用之前调用: <?php // 保存一天 $lifeTime = 24 * 3600; session_set_cookie_params($lifeTime); session_start(); $_SESSION["admin"] = true; ?> 如果客户端使用 IE 6.0 , session_set_cookie_params(); 函数设置 Cookie 会有些问题,所以我们还是手动调用 setcookie 函数来创建 cookie。
2.4 检查session是否存在?
2.5更改session_id session_regenerate_id([bool $delete_old_session]) 更改成功则返回true,失败则返回false。 2.6 session_name() 返回当前session的name或改变当前session的name。如果要改变当前session的name,必须在session_start()之前调用该函数。注意:session_name不能只由数字组成,它至少包含一个字母。否则会在每时每刻都生成一个新的session id. |
文明社会,从理性发言开始。谢绝地域攻击。