cookie和session的总结

关于cookie和session的一些实测结果,和搜索出的结果有些会有所出入,有待进一步测试
--setcookie($_COOKIE索引,索引值,到期时间戳,路径,域名,安全连接,脚本读写)
省略到期时间戳,默认为0,有效期至关闭浏览器为止,设置小于当前时间戳失效
省略路径和域名,默认当前,所以如果要设置全局有效的cookie,最好设置路径='/'
最后一个参数是新加入,可以让本地脚本如js读写cookie
--用header发送cookie请求时,时间格式有特殊要求,要用gmstrftime("%A, %d-%b-%Y %H:%M:%S GMT")
--如果cookie的有效期是至关闭浏览器,则cookie仅存在内存中,同一个浏览器的不同窗口和不同浏览器的不同窗口是不共享cookie的
如果设置了cookie的有效时间,cookie通常会存在本地,同一浏览器的不同窗口会共享cookie,但是不同浏览器的不同窗口仍然是不共享cookie的

_*****_

--用session保存不同页面间的状态主要是通过sessionid,只要能正确的传递sessionid就可以获得对应的session值
--影响传递sessionid的方式有php.ini中的三个参数
session.use_cookies = 1
session.use_only_cookies = 1
session.use_trans_sid = 0

其相互作用方式如下 if 结构
if (session.use_cookies = 1)
{
    cookie方式
    session_start()设置cookie中的sessionid,获取session
}
else
{
    if (session.use_only_cookies = 0)
    {
        if (session.use_trans_sid = 1)
            自动url方式
        else
            手动url方式

        session_start()设置url中的的sessionid,获取session
    }       
    else
        session失效
}
只要开启cookie方式,即使自动/手动url方式开启使url带有sessionid,系统也会自动读入cookie中的sessionid
自动url方式必须要有页面的跳转,可以是表单提交(GET/POST),也可以是<a>标签的连接跳转

--cookie方式,也是在实际项目中运用的方式,与cookie紧密相关,禁用cookie又未开启url重写功能就使session无法使用,(也就是为什么大多数网站在禁用cookie的情况下无法访问的原因)
--在此种方式下设置的cookie是系统自动设置的,无需通过setcookie函数手动设置
但是可以通过session_get/set_cookie_params()函数进行临时性的查看和更改,类似ini_get/set()函数
想获得永久更改可以通过在php.ini中设置如下参数值
session.name = PHPSESSID
session.cookie_lifttime = 0
session.cookie_path = /
session.cookie_domain = none
session.cookie_secure = 0
分别对应setcookie各个参数,其中lifetime和原参数略有差别
如果想自己分配sessionid,可以直接使用setcookie函数,但是name参数必须与session.name一致

--cookie的失效最直接的结果是导致sessionid无法读取,进而无法获得对应的session值,但是在服务器中session却依然存在
只要在对应文件夹下找到sessionid,就可以通过session_id(SESSID)来设置sessionid,这样就可以继续获取对应的session
但是用户是很难获取这些废弃的sessionid,所以服务器增加了无用session的垃圾回收机制,通过php.ini中的三个值实现
session.gc_maxlifetime = 1440
session.gc_probability = 1
session.gc_divisor = 1000
对应的意思就是只要一个session经过1440秒没有被使用就认定为垃圾session,每经过1000次的session访问就进行1次垃圾session的删除操作

_*****_

--关于多用户多session的问题
(cookie方式)要想同时登录多个session,首要条件是同时获取相互不共享的cookie(如果共享,后面的登录就会覆盖前面的登录),这样就可以获取不同的sessionid,在上面的说明中有相关cookie共享方面的描述
(自动url方式)自动url方式获取sessionid完全依赖跳转后url中的信息,登录页面由于在rul中不存在sessionid,所以每次登录都会新建一个sessionid,经过测试,即使同一个浏览器窗口的不同标签页进行同时登录,也不会影响session_start()正确匹配跳转前的sessionid,这应该是实现同时登录的最有效的方式,但关闭浏览器后登录信息就会全部丢失
(手动url方式)手工分配sessionid即可,但是如何保证手工分配的sessionid的唯一和不易破解是个问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值