博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cookie、session 整理
阅读量:5053 次
发布时间:2019-06-12

本文共 2906 字,大约阅读时间需要 9 分钟。

django操作cookie, session

http协议四大特性

  1.基于TCP/IP作用于应用层的协议

  2. 基于请求响应

  3. 无状态 【每次访问对服务器来说都是一个全新的请求】

  4. 无链接

如何可以把用户的状态保存下来,不需要总是要登入?

cookie:  保存在客户端浏览器上的键值对, cookie中明文特性不安全,进化一下

session:  保存在服务端上的键值对.【下次访问时,就不需要再登入,带着特有的键值对就可以了】

    服务端产生随机的串儿返回给客户端,服务端找一个地方将串儿与对应的信息存起来{‘随机字符’:‘可以是敏感信息,也可以是其它随机值’}

    返回给客户端的串是要存放在浏览器上的,而cookie就是存放键值对的地方,当然也可以将session存放在别的地方

 

django: return HttpRresponse()    ==> obj = HttpRresponse()

     return  render()                ==>   obj =  render() 

      return  redirect()    ==>  obj = redirect()

    这三个都是HttpRresponse对象

 

设置cookie:  

   obj.set_cookie( )   给浏览器设置cookie

 

获取cookie

   request.COOKIE.get('name')

   request. COOKIE['name']

 

登入装饰器

from  functools import wraps def login_auth(func):     @wraps(func)     def inner(request, *args, **kwargs):         old_path = request.get_full_path()         # print('这是request.path():', request.path)         if request.COOKIES.get('name'):             return func(request, *args, **kwargs)         else:             return redirect('/login/?next=%s' % old_path)     return inner 设置:
def login(request):     if request.method == 'POST':         username = request.POST.get('username')         password = request.POST.get('password')         if username == 'jason' and password == '123':             old_path = request.GET.get('next')             if old_path:                 obj = redirect(old_path)             else:                 obj = redirect('/do/')             obj.set_cookie("name", "jason", expires=3)             return obj

参数:

  • key, 键
  • value='', 值
  • max_age=None, 超时时间
  • expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
  • path='/', Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
  • domain=None, Cookie生效的域名
  • secure=False, https传输
  • httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

 

django

  设置session:

  request.session['name']  = 'jason'

  干了三件事:1.先成成一个随机的字符串,【一个浏览器APP一行串】

        2.在django session表中存储该随机字符串与数据的记录【在中间件时写入】

        3.将随机的字符串发送给客户端浏览器

 

  获取session:

    request.session.get('name')【浏览器将session串交给django,django会自动比对一下,将结果放入request.session中】

       1.django自动获取浏览随机字符串去django session 表里面比对

    2. 如果比对成功,会将当前随机字符串对应的数据赋值给request.session

    3. 通过request.session 操作该数据(数据不存在也不会影响我们的业务逻辑)

 

  django默认的session存活时间是两周(14天)

  浏览器会设置一个键sessionid来存放session值

 

  工作原理:

  django会按自己的方式生成一个字符串,字符串后面对应的是一个大字典,asdfsdf4656: {'name': 'jason', 'password': "123',  'code': ‘sfdf’ ....}

  设置完成后,将生成的的session串给客户浏览器一份,浏览器来访问我的服务端会携带这个串并自动交给django,  django会自动处理,

  django判断我的数据库中是否有一个相同的串,有就将session串对应的大字典对象放入request.session中。

 

删除session:

  1. request.session.deletet()    #  删除数据库中的session

  2. request.session.flush()    #  删除数据和会话的Coikie  用于确保前面的会话数据不可以再次被用户的浏览器访问

设置会话Session和Cookie的超时时间request.session.set_expiry(value)    * 如果value是个整数,session会在些秒数后失效。    * 如果value是个datatime或timedelta,session就会在这个时间后失效。    * 如果value是0,用户关闭浏览器session就会失效。    * 如果value是None,session会依赖全局session失效策略。

 

转载于:https://www.cnblogs.com/qingqinxu/p/11246736.html

你可能感兴趣的文章
VS WebDev.WebServer40
查看>>
openjudge 2971:抓住那头牛 解题报告
查看>>
如何实现redis集群?
查看>>
架构中的集成难点
查看>>
正则表达式
查看>>
liunx系统虚拟机下安装tomcat9以及访问tomcat案例
查看>>
Oracle 插入Date数据
查看>>
word文档操作
查看>>
UIpageControl
查看>>
js判断是否为IE浏览器,是返回true,否返回false
查看>>
Linux性能分析 vmstat基本语法
查看>>
SpringMVC框架学习笔记(2)——使用注解开发SpringMVC
查看>>
深入理解递归函数的调用过程
查看>>
《在C#中实现Socket端口复用》 以及《 UDP 一个封锁操作被对 WSACancelBlockingCall 的调用中断。》问题...
查看>>
PDF格式的“在线阅读”和“下载”
查看>>
无耻之徒(美版)第七季/全集Shameless US迅雷下载
查看>>
svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
查看>>
Webpack4 学习笔记四 暴露全局变量、externals
查看>>
CF1005F Berland and the Shortest Paths
查看>>
vscode点击ctrl键报错Request textDocument/definition failed.
查看>>