`
ydbc
  • 浏览: 722433 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

session

 
阅读更多
session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制。

由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容。


对于 Cookie 来说,假设我们要验证用户是否登陆,就必须在 Cookie 中保存用户名和密

码(可能是 md5 加密后字符串),并在每次请求页面的时候进行验证。如果用户名和密码

存储在数据库,每次都要执行一次数据库查询,给数据库造成多余的负担。因为我们并不能

只做一次验证。为什么呢?因为客户端 Cookie 中的信息是有可能被修改的。

假如你存储 $admin 变量来 表示用户是否登陆,$admin 为 true 的时候表示登陆,为 false 的

时候表示未登录,在第一次通过验证后将 $admin 等于 true 存储在 Cookie,下次就不用验证了,

这样对么?错了,假如有人伪造一个值为 true 的 $admin 变量那不是就立即取的了管理权限么?

所以说这样非常的不安全。


而 Session 就不同了,Session 是存储在服务器端的,远程用户没办法修改 session 文件的内容,

因此我们可以单纯存储一个 $admin 变量来判断是否登陆,首次验证通过后设置 $admin 值为 true,

以后判断该值是否为 true,假如不是,转入登陆界面,这样就可以减少很多数据库操作了。

而且可以减少每次为了验证 Cookie 而传递密码的不安全性了,即使密码进行了 md5 加密,也是

很容易被截获的。假如你没有使用 SSL 安全协议的话,session 验证只需要传递一次。


当一台WWW服务器运行时,可能有若干个用户浏览正在运行这台服务器上的网站。当每个用户首次

与这台WWW服务器建立连接时,他就与这个服务器建立了一个Session,同时服务器会自动为其分配

一个SessionID,用以标识这个用户的唯一身份。

这个唯一的SessionID是有很大的实际意义的。当一个用户提交了表单时,浏览器会将用户的SessionID

自动附加在HTTP头信息中,(这是浏览器的自动功能,用户不会察觉到),当服务器处理完这个表单后,

将结果返回给SessionID所对应的用户。试想,如果没有SessionID,当有两个用户同时进行注册时,

服务器怎样才能知道到底是哪个用户提交了哪个表单呢。

Session ID 是随机生成的,因此能保证唯一性和随机性,确保 Session 的安全。一般如果没有设置

Session 的生存周期,则 Session ID 存储在内存中,关闭浏览器后该 ID 自动注销,重新请求该页面后,

重新注册一个 session ID。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics