码迷,mamicode.com
首页 > 其他好文 > 详细

Cookie与Session

时间:2018-08-31 22:49:17      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:form   mon   back   path   col   原因   没有   ash   dash   

 
 
一、Cookie

Cookie的由来:
由于HTTP是无状态的,浏览器的每次请求对于服务端来说都是全新的,而在某种特定的情况下,我们需要浏览器保持当前的某种状态,因此就产生了Cooke。
 
先来介绍一下Cookie:
Cookie是服务器发送出来存储到浏览器中的一组组键值对,浏览器再次访问该该服务器时,会自动携带这些键值对,以便服务器从中提取有用的信息,而服务器也可以通过这些键值对来判断不同的用户。
 
Cookie的使用:
1.设置Cookie
from django.shortcus import HttpResponse, render, redirect
response = HttpResponse(...)
response = render(...)
response = redirect(...)
response.set_cookie(key, value, ...)
response.set_signed_cookie(key, value, salt=‘..‘, ..)    # 设置签名cookie
其它参数:
    max_age = None,    # 超时时间,单位是s
    expires = None,    # 超时时间,datetime格式
    path = ‘/‘,        # 生效的路径
    domain = None,     # Cookie生效的域名
    secure = False,    # https传输
    httponly = False,  # 只能http传输,无法被JS获取(除抓包)
 
2.获取Cookie的value:
request.COOKIES[key]
request.get_signed_cookie(key, default=RAISE_ERROR, salt=‘..‘, max_age=None)
 
3.删除Cookie:
rep.delete_cookie(key)
 
4.Cookie版登陆校验:
def check_login(func):
    @wraps(func)
    def inner(request, *args, **kwargs):
        next_url = request.get_full_path()
        if request.get_signed_cookie("login", salt="SSS", default=None) == "yes":
            # 已经登录的用户...
            return func(request, *args, **kwargs)
        else:
            # 没有登录的用户,跳转刚到登录页面
            return redirect("/login/?next={}".format(next_url))    #加这个的原因在于让登陆页面获取到它的值,然后在登陆成功之后,就自动跳转到先前登陆的页面
    return inner
 
def login(request):
    if request.method == "POST":
        username = request.POST.get("username")
        passwd = request.POST.get("password")
        if username == "xxx" and passwd == "dashabi":
            next_url = request.GET.get("next")
            if next_url and next_url != "/logout/":
                response = redirect(next_url)
            else:
                response = redirect("/class_list/")
            response.set_signed_cookie("login", "yes", salt="SSS")    # 设置cookie
            return response
    return render(request, "login.html")
 
@check_login
def index(request):
    return render(request, ‘index.html‘)
 
 
 
二、Session

Session的由来:
虽然Cookie的出现解决了HTTP请求无状态的问题,但Cookie本身有两个缺陷:a. Cookie本身最大支持4096个字节;b. Cookie保存在客户端的浏览器上,容易被拦截或窃取,不安全。在这种情况下Session就出现了。
 
Session的介绍:
Session和Cookie本质上是共通的,只是Session中的key(自动生成的字符串)作为浏览器中Cookie的value保存在本地,而Session中的key(自动生成的字符串)和value(自定义格式存储的用户信息,如user)则以字典形式保存在服务器的数据库中。
而Session依赖于Cookie,当Django用到Session时,数据库中的key就会随机生成一段字符串,保存到浏览器Cookie的value中,而这段字符串是Session用来寻找用户信息(value)的唯一标识。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Cookie与Session

标签:form   mon   back   path   col   原因   没有   ash   dash   

原文地址:https://www.cnblogs.com/changwoo/p/9568519.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!