php session的理解【转】

php session的理解【转】
一、什么是session?php

  Session的中文译名叫作“会话”,其原本的含义是指善始善终的一系列动做/消息,好比打电话时从拿起电话拨号到挂断电话这中间的一系列过程能够称之为一个session。目前社会上对session的理解很是混乱:有时候咱们能够看到这样的话“在一个浏览器会话期间,...”,这里的会话是指从一个浏览器窗口打开到关闭这个期间;也能够看到“用户(客户端)在一次会话期间”这样一句话,它可能指用户的一系列动做(通常状况下是同某个具体目的相关的一系列动做,好比从登陆到选购商品到结帐登出这样一个网上购物的过程;然而有时候也可能仅仅是指一次链接;其中的差异只能靠上下文来推断了。
  然而当session一词与网络协议相关联时,它又每每隐含了“面向链接”和/或“保持状态”这样两个含义,“面向链接”指的是在通讯双方在通讯以前要先创建一个通讯的渠道,好比打电话,直到对方接了电话通讯才能开始。“保持状态”则是指通讯的一方可以把一系列的消息关联起来,使得消息之间能够互相依赖,好比一个服务员可以认出再次光临的老顾客而且记得上次这个顾客还欠店里一块钱。这一类的例子有“一个TCP session”或者“一个POP3 session”。
  鉴于这种混乱已不可改变,要为session下个定义就很难有统一的标准。而在阅读session相关资料时,咱们也只有靠上下文来推断理解了。不过咱们能够这样理解:例如咱们打电话,从拨通的那一刻起到挂断电话期间,由于电话一直保持着接通的状态,因此把这种接通的状态叫作session。 它是访客与整个网站交互过程当中一直存在的公有变量,在客户端不支持COOKIE的时候,为了保证数据正确、安全,就采用SESSION变量。访问网站的来客会被分配一个惟一的标识符,即所谓的会话 ID。它要么存放在客户端的 cookie,要么经由 URL 传递。
  SESSION的发明填补了HTTP协议的局限:HTTP协议被认为是无状态协议,没法得知用户的浏览状态,当它在服务端完成响应以后,服务器就失去了与该浏览器的联系。这与HTTP协议原本的目的是相符的,客户端只须要简单的向服务器请求下载某些文件,不管是客户端仍是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是独立的,比如一个顾客和一个自动售货机或者一个普通的(非会员制)大卖场之间的关系同样。
  所以经过SESSION(cookie是另一种解决办法)记录用户的有关信息,以供用户再次以此身份对web服务器提起请求时做确认。会话的发明使得一个用户在多个页面间切换时可以保存他的信息。网站编程人员都有这样的体会,每一页中的变量是不能在下一页中使用的(虽然form,url也能够实现,但这都是很是不理想的办法),而SESSION中注册的变量就能够做为全局变量使用了。
  那么SESSION到底有什么用处呢?网上购物时你们都用过购物车,你能够随时把你选购的商品加入到购物车中,最后再去收银台结账。在整个过程当中购物车一直扮演着临时存贮被选商品的角色,用它追踪用户在网站上的活动状况,这就是SESSION的做用,它能够用于用户身份认证,程序状态记录,页面之间参数传递等。
  SESSION 的实现中采用COOKIE技术,SESSION会在客户端保存一个包含session_id(SESSION编号)的COOKIE;在服务器端保存其余 session变量,好比session_name等等。当用户请求服务器时也把session_id一块儿发送到服务器,经过session_id提取所保存在服务器端的变量,就能识别用户是谁了。同时也不难理解为何SESSION有时会失效了。
  当客户端禁用COOKIE时(点击IE中的“工具”—“internet="">Internet选项”,在弹出的对话框里点击“安全”—“自定义级别”项,将“容许每一个对话COOKIE”设为禁用),session_id将没法传递,此时SESSION失效。不过php5在linux/unix平台能够自动检查cookie状态,若是客户端设置了禁用,则系统自动把session_id附加到url上传递。windows主机则无此功能。linux

[danger] Warning: Cannot send session cache limiter - headers already sent (output started at /usr/local/apache/htdocs/cga/member/1.php:2)…………web

相关文章
相关标签/搜索