Cookie与Session

Cookie与Session

cookie与session的做用:保存信息html

当第一次登陆成功后,服务端给你返回一个随机字符串,保存在客户端浏览器上,以后每次超服务端发送请求只须要携带该随机字符串,服务端就能识别当前用户身份,而且在超过必定时间若是一直没有访问,该session值会失效,默认失效时间为14天django

一、Cookie

HTTP协议是无状态的,无状态的意思就是每次请求都是独立的,人生只如初见,每次请求对服务器来讲就是全新的,不会保留数据,可是在某些时候好比登陆的状态咱们是须要保留的,所以就有了cookie浏览器

一、什么是cookie

cookie指一段从服务端发送来存储在浏览器上一组键值对,下次访问服务器时浏览器会自动携带这些键值对,校验服务器

二、浏览器查看cookie

 三、Django中操做cookie

一、获取cookiecookie

request.COOKIES[' ']
request.COOKIES.get(" ")

二、设置cookiesession

obj = HttpResponse(" ...")
obj.set_cookie(k, v)

三、删除cookieurl

obj = HttpResponse(" ...")
obj.delete_cookie('user')  # 删除用户浏览器上以前设置的usercookie值
# 登陆认证装饰器
from functools import wraps
def login_auto(func):
    @wraps(func)
    def inner(request, *args, **kwargs):
     # 获取url后携带的路径 target_url
= request.path_info # 获取cookie值 if request.COOKIES.get('username'): res = func(request, *args, **kwargs) return res else: return redirect('/login/?next=%s'%target_url) return inner # 登陆 def login(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') if username == 'shen' and password == '123': # 获取url后缀判断上次是否访问过其余页面url target_url = request.GET.get('next') if target_url: # 若是是登陆成功后调转到以前的页面 obj = redirect(target_url) else: # 不然回到主页 obj = redirect('/home/') # 设置cookie值,和设置失效时间s # obj.set_cookie('username', 'xxx', max_age=5) obj.set_cookie('username', 'xxx') return obj return render(request, 'login.html') @login_auto def home(request): return HttpResponse('主页') @login_auto def index(request): return HttpResponse('index页面') @login_auto def login_out(request): obj = HttpResponse('注销') # 删除cookie值 obj.delete_cookie('username') return obj

request.path_info   只拿路径部分,不拿参数spa

request.get_full_path()   拿路径加参数code

    print('request.path_info:',request.path_info)  # 只拿路径部分 不拿参数
    # request.path_info: /home/
    print('request.get_full_path():',request.get_full_path())  # 路径加参数
    # request.get_full_path(): /home/?username=jason&password=123    

二、session

保存在服务端上的键值对htm

一、设置session值

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

设置过程当中作了哪些事:

一、Django内部会自动生成一个随机字符串

二、去django_session表中存储数据,键就是随机字符串,值就是保存的数据(中间键作的)

三、将生成好的随机字符串返回给客户端浏览器,浏览器保存键值对(sessionid)

二、获取session

res = request.session.get('name')

获取是作了哪些事:

一、Django会自动去浏览器中的cookie值去sessionid键值对获取随机字符串

二、拿着该字符串去django_session表中比对数据

三、若是比对上了及将字符串对应的数据获取出来并封装到request.session中

Django中默认的session值有效期是14天,能够设置超时时间

request.session.set_expiry(value)
* 若是value是个整数,session会在些秒数后失效。
* 若是value是个datatime或timedelta,session就会在这个时间后失效。
* 若是value是0,用户关闭浏览器session就会失效。
* 若是value是None,session会依赖全局session失效策略。

三、删除当前会话的全部session数据

# 删除当前会话的全部Session数据
request.session.delete()
          
# 删除当前的会话数据并删除会话的Cookie。  推荐使用
request.session.flush() 
相关文章
相关标签/搜索