session用法详解
时间:2006-02-21 来源:瘦死的骆驼
在客户端与服务器的交互过程中,我们通过session记录用户的有关信息,以供用户再次以此身份对web服务器提供要求时作确认。session用中文来解释就是会话期。一个会话期开始于用户输入一个站点的网址时,结束于他离开这个站点时。
session中注册的变量可以作为全局变量使用.
php中的session也是通过取得cookie实现的。cookie 存在于客户端,也就是用户的机器中,里面保存着用户的session ID,也就是session号码,当用户的浏览器请求服务器时把session ID也一起送到服务器,这样服务器就可以把变量识别开了。这样我们就不难理解了,为什么有时session会失效了。不信的话,你可以试试: 在IE的"工具"菜单上有"Internet选项"菜单,打开后再选"安全"->"自定义级别",将安全设置中的"允许使用每个对话cookies"设为禁用,再看看session能不能用。不过php4在linux/unix平台上可以自动检查cookies状态,当cookies 不可用时,自动会把session ID附带在url上进行传递。
从php4开始php对session有了的全面支持。php4时代的session实现大都从phplib学来的,它也靠cookies保存session id,用文件系统保存变量(默认情况下)。因此,它的session 变量不能保存对象(事实上能保存对象内容,但没有意义,因为它是保存在磁盘上的,不是活的对象,充其量也就是对象尸体。)不过这点的限制不是太大,我们在大部分情况下都只需要保存变量就行了。当然你也可以将session保存在数据库中。
在php4以后的版本由于比php3多了session支持,所以在php.ini文件中也多了session配置选项。下面我们来看看各项的作用与意义:
[Session]
session.save_handler = files ; handler used to store/retrieve data(用什么保存session变量,默认情况下用文件)
session.save_path = c:/temp ; argument passed to save_handler(保存session变量的目录,在linux/unix下为/tmp,在win下设为你的目录)
; in the case of files, this is the
; path where data files are stored
session.use_cookies = 1 ; whether to use cookies(是否使用cookies,当然,在win下别无选择)
session.name = PHPSESSID
; name of the session(默认session使用的cookies名,建议不要改动)
; is used as cookie name
session.auto_start = 0 ; initialize session on request startup(是否自动启用session,当为1时,在每页中就可以不必调用session_start()函数了)
session.cookie_lifetime = 0 ; lifetime in seconds of cookie(设定 cookie 送到浏览器后的保存时间,单位为秒。缺省值为 0,表示直到浏览器关闭。)
; or if 0, until browser is restarted
session.cookie_path = / ; the path the cookie is valid for(cookie)(cookies有效路径)
session.cookie_domain = ; the domain the cookie is valid for(cookies有效域名)
session.serialize_handler = php ; handler used to serialize data(定义序列化数据的标识,本功能只有 WDDX 模块或 PHP 内部使用。缺省值为 php)
; php is the standard serializer of PHP
session.gc_probability = 1 ; percentual probability that the (设定每次临时文件开始处理 (gc, garbage collection) 处理概率。缺省值为 1。 )
; garbage collection process is started
; on every session initialization
session.gc_maxlifetime = 1440 ; after this number of seconds, stored(设定保存session的临时文件被清除前的存活秒数)
; data will be seen as garbage and
; cleaned up by the gc process
session.referer_check = ; check HTTP Referer to invalidate (决定参照到客户端的 Session 代码是否要删除。有时在安全或其它考虑时,会设定不删除。缺省值为 0。)
; externally stored URLs containing ids
session.entropy_length = 0 ; how many bytes to read from the file(设定 session 从高熵值资源读取的位数。缺省值为 0.)
session.entropy_file = ; specified here to create the session id(设定 session 代码建立时,使用外部高熵值资源或文件来建立,例如 UNIX 系统上的 /dev/random 或
/dev/urandom。 )
; session.entropy_length = 16
; session.entropy_file = /dev/urandom
session.cache_limiter = nocache ; set to {nocache,private,public} to (设定session 缓冲限制)
; determine HTTP caching aspects
session.cache_expire = 180 ; document expires after n minutes(文档有效期,单位为分钟)
完成一个session注册并删除需要的函数主要有以下几个
session_start: 初始化session,根据当前会话的session_id创建session。需要用session的每一个页面最开始处调用。
$_SESSION 包含当前脚本中 session 变量的数组,所以可以用向数组中添加元素的方法注册新的session变量。它是一个全局变量,可以在网站的anywhere使用。
如$_SESSION["name"] = camel;
当然也可以用session_register函数来注册session
如 $name = camel;
session_register("name"); 达到效果都是一样地。
如果想确认某个变量是否被注册,则要用到session_is_registered。此函数返回true或false。可以防止用户重复注册session.
session用完后需要注销,注销session有好几个函数可以用。
session_unregister();
session_unregister()函数主要作用是注消当前的一个session变量。它需要明确指明要注销哪个session变量的。如session_unregister("name");
session_destroy()是清除当前的session环境。意思就是说,当你用session_destroy()函数后,那么你就不可能再用session_is_registered()来检测session的变量了。但是需要注意的是他不能清除global中的session或使用了session cookie的中的session.也就是说,它只能清除session_register()进来的变量,而不能清除$_SESSION或$HTTP_SESSION_VARS进来的变量。
而$_SESSION注册进来的变量,清除起来也比较容易,它本身就是一个数组,任何清空数组的办法对它都有用,$_SESSION=array();就over了
如果不幸在程序中同时使用了$_SESSION和session_register来注册变量,省事一点的办法,session_unset();就万事大吉了。
再来回想一下我们使用session的流程:
创建session->
session star()
把变量注入session()->
$_SESSION,session_register()
删除变量->
session_unregister(),session_distroy(),$_SESSION,unset().
相关阅读 更多 +