敦兮其若朴,旷兮其若谷
做网站登录功能时是存session还是存cookie呢?相信很多人在学习初期都或多或少有过疑惑。其实session和cookie都可以用以做登录的验证,都可以实现判断用户的登录状态,但也有一些区别。
首先说说session,session是存储在服务器端,一般以sess_sessionID做文件名存储,存储位置可通过session_save_path()获得,也可通过php.ini中更改,通过session_start()标识开启session会话,当你访问到通过session_start()启用session会话的页面时,会在你本地cookie文件中存储一个sessionID,PHP中默认名称为PHPSESSID(也可以自定义该名称,配置文件中的session_name值),此时session和cookie是搭配使用了,由于一个网站有很多客户端访问,每个http链接又是无状态的,所以你登录了,服务器怎么区分你和别的客户端呢,就用到了cookie中存储的这个PHPSESSID,通过这个sessionID去服务器上session存储路径下查找对应的session文件,如果查找到了则登录成功,否则登录失败。那存储在cookie中的sessionID是怎样传递到后台的呢,需不需要我们手动传递呢,答案是不需要,它通过http请求的header头部一块传递到服务器(apache服务器可通过apache_request_headers()查看)。
session_start(),执行过程是,开启session_start()时,首先判断$_COOKIE[session_name()]是否存在,存在则sessionID = $_COOKIE[session_name()];不存在则通过session_id()函数生成新的sessionID 然后会调用setcookie()函数把生成的sessionID放入到用户浏览器的cookie中,至此我们可以了解到session_start()的具体实现。
再说说cookie,cookie存在用户端的浏览器中,如果你加密做的特别好,使得cookie的安全级别达到了较高水平,可以不用session直接存cookie,但我们大多数情况是做不到那种安全性的,本着“不要完全相信用户端输入的内容”的圣句,所以我们如果完全采用cookie来存储用户信息,容易出现不良用户骗过登录验证,造成不良后果,所以大多数采用的还是主要通过存储session, 依据业务场景适当把一些不涉及太大安全的内容存储到cookie中的这种搭配方法。
最后列出常用的一些session函数,以方便查阅:
session_start() 手动开启session会话 session_save_path() session文件存储位置 session_name() sessionID存储在COOKIE中的名称 session_cache_expire() 当前缓存的到期时间,若更改需在session_start()前设置
© 后花院 | 静心思考 | Powered by EMLOG | Theme by NIMA
友情链接:Nutcracker