zoukankan      html  css  js  c++  java
  • cookie和session

    一,什么是cookie

      Cookie具体指的是一小段信息,他是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息。

    二,Cookie的工作原理

      cookie是由服务器产生的内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是‘谁’了。

    三,django中操作cookie

      登陆后,浏览器中添加cookie:

    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('/home/')
                # 用户登录成功 朝浏览器设置一个cookie
                obj.set_cookie('name','jason',expires=7*24*3600) # expires:保存cookie的时间,单位是秒
                return obj
        return render(request,'login.html')

      制作登陆校验装饰器:

    from functools import wraps
    def login_auth(func):
        @wraps(func)
        def inner(request,*args,**kwargs):
            # 校验cookie
            # print(request.get_full_path())
            # 拿到需要登陆校验的路径
            old_path = request.get_full_path()
            if request.COOKIES.get('name'):
                return func(request,*args,**kwargs)
            return redirect('/login/?next=%s'%old_path)
        return inner

      删除cookie:

    def logout(request):
        rep = redirect("/login/")
        rep.delete_cookie("user")  # 删除用户浏览器上之前设置的usercookie值
        return rep

    四,什么是session:

      cookie虽然在一定程度上解决了保持状态上的要求的需求,但是由于cookie本身的需最大只支持4096字节,以及cookie本生存在客户端,可能被拦截或者窃取,所以我们需要一些新的东西能支持更多的字节,并且保存在服务器,有较高的安全性。这就是session。

      案例:

      登陆后添加session:

    def login(request):
        if request.method == "POST":
            user = request.POST.get("user")
            pwd = request.POST.get("pwd")
    
            if user == "alex" and pwd == "alex1234":
                # 设置session
                request.session["user"] = user
                # 获取跳到登陆页面之前的URL
                next_url = request.GET.get("next")
                # 如果有,就跳转回登陆之前的URL
                if next_url:
                    return redirect(next_url)
                # 否则默认跳转到index页面
                else:
                    return redirect("/index/")
        return render(request, "login.html")

      制作校验登陆状态的装饰器:

    def check_login(func):
        @wraps(func)
        def inner(request, *args, **kwargs):
            next_url = request.get_full_path()
            if request.session.get("user"):
                return func(request, *args, **kwargs)
            else:
                return redirect("/login/?next=%s"%next_url)
        return inner

      设置session:request.session['name'] = 'jason'

        1:先生成了一个随机的字符串

        2:在django session表中存储该随机字符串与数据的记录

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

      获取session:request.session.get('name')

        1:django自动获取浏览器中随机字符串取django session表里面的进行对比

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

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

      删除当前会话的所有session数据

        requset.session.delete()

      删除当前的会话数据并删除会话的cookie

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

      设置会话session和cookie的超出时间

        request.session.set_expiry(value)

          如果value是个整数.session会在数秒之后失效。

          如果value是个datatime或timedelta,session就会在这个时间后失效。

          如果value是0,用户关闭浏览器session就会失效。

          如果value是None,session会依赖全局session失效策略。

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

          

            

  • 相关阅读:
    spring管理hibernate session的问题探究
    【J2EE入门】13个规范
    WCF基础
    初识WCF
    一路风雨,一路收获
    【项目经验】——JSON.parse() && JSON.stringify()
    【项目经验】--EasyUI DataGrid之右键菜单
    NuGet 发布
    【项目经验】之——Controller向View传值
    【项目总结】之——JS分割字符串
  • 原文地址:https://www.cnblogs.com/ay742936292/p/11041757.html
Copyright © 2011-2022 走看看