常见Session操作

  • 通过HttpRequest对象的Session属性进行会话的读写操作,以键值对的格式操作Session

  • 设置Session

      request.session['键'] = 值
    
  • 读取Session

      request.session.get('键',默认值)
    
  • 删除指定键的值,在存储中只删除某个键对应的值

      del request.session['键']
    
  • 清除所有键的值,在存储中删除所有键对应的值

      request.session.clear()
    
  • 清除Session数据,在存储中删除所有键及对应的值,形成空表

      request.session.flush()
    
  • 设置会话的超时时间

      request.session.set_expiry(value)
    
    • 如果value是一个整数,会话将在value秒没有活动后过期
    • 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期
    • 如果value为None,那么会话则两个星期后过期

Session代码演练

  • 配置URLconf

      url(r'^session/$', views.session),
    
  • 视图:对于读取和删除操作可以查看表数据来验证

      def session(request):
          # 写Session
          request.session['c1'] = 'login'
          # 读Session
          c = request.session.get('c1')
          print c
    
          # 删除指定键的值
          # del request.session['c1']
          # 删除所有键的值
          # request.session.clear()
          # 删除所有的Session记录
          # request.session.flush()
    
          return HttpResponse('测试Session')
    
  • 写入Session后

Session依赖于Cookie

思考:所有请求者的Session都会存储在服务器中,服务器如何区分请求者和Session数据的对应关系呢?

答案:在使用Session后,会在Cookie中存储一个sessionid的数据,每次请求时浏览器都会将这个数据发给服务器,服务器在接收到sessionid后,会根据这个值找出这个请求者的Session

提示:

1. 如果想使用Session,浏览器必须支持Cookie,否则就无法使用Session了
2. 存储Session时,键与Cookie中的`sessionid`相同,值是开发人员设置的键值对信息,进行了base64编码,过期时间由开发人员设置
  • base64编码解码
对hello进行base64编码
echo "hello" | base64

结果
aGVsbG8K
对aGVsbG8K进行base64解码
echo "aGVsbG8K" | base64 -d

结果
hello