1.session是个啥?
和cookie的本质区别是:cookie是保存在客户端的键值对,而session是保存在服务器端的键值对。
而基于Cookie做用户验证时并不适合将敏感信息放在cookie中。
2.session工作原理:
以登录为例
当用户认证成功后,服务器端会生成一段随机字符串,然后将这段字符串保存在客户端cookie中,在服务器端以键值对的形式同样保存这段随机字符串,
{"随机字符串":{相关信息}}
3.简单实例:
views:
1 user_info={ 2 'user1':{'pwd':'123'}, 3 'user2':{'pwd':'321'}, 4 } 5 def login(request): 6 if request.method=='GET': 7 return render(request,'login.html') 8 if request.method=='POST': 9 u=request.POST.get('user') 10 p=request.POST.get('pwd') 11 dic=user_info.get(u) 12 if dic and dic['pwd']==p: 13 request.session['username']=u 14 request.session['is_login']=True 15 return redirect('/index/') 16 else: 17 return render(request, 'login.html') 18 def index(request): 19 if request.session('islogin',None): #request.session 拿到了随机字符串, 20 #根据字符串在拿到相关信息 21 return HttpResponse('ok') 22 else: 23 return HttpResponse('invalid')
HTML:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Login</title> 6 </head> 7 <body> 8 <div> 9 <form action="/login/" method="POST"> 10 <input name="user" type="text" placeholder="用户名"/> 11 <input name="pwd" type="password" placeholder="密码"/> 12 <input type="submit" value="登录"/> 13 </form> 14 {{ error_msg }} 15 </div> 16 </body> 17 </html>
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>index</title> 6 </head> 7 <body> 8 {{ username }} 9 </body> 10 </html>
在写好配置后,还有一步关键步骤:
在Terminal里:
1 python manage.py makemigrations 2 python manage.py migrate
在chorm里可以查看到:
4.session的配置操作:
1 SESSION_COOKIE_NAME='sessionid' #session的cookie保存在浏览器上的key,即:session=随机字符串 2 SESSION_COOKIE_PATH='/' #session的cookie保存路径 3 SESSION_COOKIE_DOMAIN=None #session的cookie保存域名 4 SESSION_COOKIE_SECURE=False #是否Https传输cookie 5 SESSION_COOKIE_HTTPONLY=True #是否只支持http传输 6 SESSION_COOKIE_AGE=1209600 #session的cookie失效日期(默认两周) 7 SESSION_COOKIE_AT_BROWER_CLOSE=False #关闭浏览器session的cookie是否失效 8 SESSION_COOKIE_SAVE_EVERY_REQUEST=False #是否每次请求都保存session,修改默认值为True之后保存
以上配置的值均为默认值。