session与登录机制

github 地址:戳这里

session

概念

  1. 指一类用来在客户端与服务器之间保持状态的解决方案
  2. 这种解决方案的存储结构

特点

  • 由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容。(也可以用其他存储方式比如redis

  • Session对象是有生命周期的

  • Session实例是轻量级的,所谓轻量级:是指他的创建和删除不需要消耗太多资源
  • Session对象内部有一个缓存

用法

Session 对象存储特定用户会话所需的属性及配置信息,在web页跳转时,信息将不会丢失

通常用于以下操作

  1. 存储整个会话过程中保持用户状态的信息,比如登录信息或者用户浏览时产生的其它信息
  2. 存储只需要在 页重新加载 过程中,或者 一组功能页 之间保持状态的对象
  3. 在 Web服务器上保持用户的 状态信息 供在任何时间从任何设备上的页面进行访问。

限制

  1. 用户登录越多,session需要的内存量越大
  2. 每个 Session 对象的持续时间是用户访问的时间加上不活动的时间。

为何需要session

HTTP协议本身是无状态的

举个喝咖啡的例子:

1、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。

2、发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。

3、发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。

具体机制

  1. 当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个 session标识 - 称为session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session idsession id的值应该是一个 既不会重复,又不容易被找到规律以仿造的字符串 ,这个session id将被在本次响应中返回给客户端保存。
  2. 由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写

    两种形式:

    // 作为url附加路径
    'http://..../xxx;jsessionid=abcdefjijeoijoifjioe'
    
    
    // 作为查询字符串
    'http://..../xxx?jsessionid=abcdefjijeoijoifjioe'
  3. 较老的技术,表单隐藏字段,此方法在防止csrf中有用

实现

基于cookie来实现用户和数据的映射

将口令放在cookie中,口令一旦被褚昂爱,就丢失映射关系。通常session的有效期通常短,过期就将数据删除

一旦服务器检查到用户请求cookie中没有携带session_id,它会为之生成一个值,这个值是唯一且不重复的值,并设定超时时间。如果过期就重新生成,如

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值