首页 > 代码库 > 12-4-会话技术

12-4-会话技术

 

         B/S请求是无状态无记忆的,任意间的请求之间不存在任何的联系,不能将请求保持下去!所以才需要会话技术把各网页文件联系起来。会话技术有cookie、session。

 

cookie

 

         cookie访问时留一些数据在用户的浏览器端,当需要使用这些数据的时候便从浏览器调用,这样每个网页间就能通过这些数据联系起来。

         cookie不那么安全,因为数据存在浏览器端,用户可以修改。

 

         setCookie(‘名’,值,有效期,有效路径,有效域,是否仅安全传输)

 

         改:直接命名相同,值不同。

         删:值为 ‘ ’ (空)。

         查:$_COOKIE         超全局数组变量来调用和查询

                   $_COOKIE[‘名’]

 

         关于有效期:cookie的有效期默认为会话结束时,设置的有效期为时间戳,所以定义时要用time()+有效期秒数。当有效期设置为time()-1时,为标准的删除cookie的方法。也可以使用PHP_INT_MAX定义有效期为永久(2038年)

 

         关于有效路径:指定cookie的有效脚本范围,生效范围为指定的目录及子目录有效,父目录无效。业务中设置为’/’ 使整站有效。

        

         关于有效域:cookie的有效域是基于域名来保存的,默认为当前站点有效。

                                     所以为了让各子域间能共用cookie,需要设置有效域为一级域名

 

  关于安全传输:分为true和false。true时传输时通过ssi加密的仅安全传输,默认值为

                              false。

 

  关于仅httponly:cookie本质为数据,所以可以被其他脚本处理,设置该项可以让cookie

                               只能被php处理。同样分为仅httponly的true和默认值false。

 

  cookie的值只支持字符串类型。不能设置数字,其它类型会被转化为字符类型。

 

 

  session

 

  跟cookie类似,但是数据存储在服务器端,更安全。

  当用户访问服务器时,服务器会开辟一个会话数据区存储数据,再给这段数据命名并返回一个ID给浏览器,再下次访问时,服务器通过识别不同的ID来调用数据。

 

  业务需求把session的开启设置为单独的脚本文件中而不是所有脚本。

  开启函数为:session_start()

  session的数据操作通过 $_COOKIE这个预定义超全局数组变量来完成。

  在开启session_start之前进行属性设置

  session_set_cookie_params()

  业务需要使设置一般为:session_set_cookie_params(有效期秒数,’/’,’一级域名’)

  session数据类型可以是任意类型(通过序列化再存储)

  $_SESSION下标仅支持字符串,不支持索引

 

  删除其中一个:unset($_SESSION[‘下标’])

  清空:$_SESSION = array()

  销毁:session_destroy()

 

 

cookie

session

存储位置

浏览器

服务器

浏览器携带的数据量

少(只携带session-id

安全性

较低

较高

存储数据的类型

只支持字符串

任意类型

数据的传输量

有限制,4k

无限制

默认的有效路径

当前目录及其子目录

整站有效

12-4-会话技术