Django中的cookie与session

cookie与session的兑现原理

 

图片 1

  

  HTTP为设计也罢”无状态”,每次要都远在同一之空中被。
在一如既往浅呼吁和下一致浅呼吁中莫另外状态保持,我们无能为力根据请求的旁方面(IP地址,用户代理等)来鉴别来自同人的连天请求。上图很明朗的显得了Django的session与cookie的贯彻原理。服务器会生成两客相同之cookie字符串,一份保存在本土,一卖发向请求的浏览器。浏览器将接的cookie字符串保存下去,当下次再度作请求时,会将消息和这段cookie一同发送到服务器,服务器得到这段cookie会与地面保存的那么份判断是否一律,如果一致便意味着用户已报到成功,保存用户登录成功的状态。Django的session保存于数据库中的数目一定给一个非常字典,key为cookie的字符串,value仍是一个字典,字典的key和value为用户设置的系信息。这样就好好的存取session里面的音讯。

 

Cookies

cookies 是浏览器也 Web
服务器存储的如出一辙粗截信息。
每次浏览器从有服务器请求页面时,它向服务器回送之前接受的cookies。它保存于浏览器下之某文件夹下。

浏览器下的cookie:

图片 2

 

 

Session  

  Django的Session机制会朝着请求的浏览器发送cookie字符串。同时为会见保留至当地平份,用来说明浏览器登录是否为同用户。它在为服务器,Django默认会把session存入到数据库被。

  Session依赖让Cookie,如果浏览器不能够保存cooki那么session就失效了。因为她需浏览器的cooki值去session里开对比。session就是因此来当服务器端保存用户之对话状态。

 

 

操作session

据悉网友lvusyy的义提醒,在操作session之前,你待联合一下Django的数据库。我于是的是Django自带的sqlite3.所以需要实行并的指令:

图片 3

 

图片 4

再有某些,在django处理请求的历程被,需要通过中间件的过滤,涉及到跨站请求伪造时,django会把要阻止了滤掉,所以我们而在setting.py中禁用跨站请求伪造的中级件,如果不禁用,记得好像会报一个403之谬误黄页。关于跨站请求伪造,之后的段我会详细说明该力量因此处:

图片 5

 

Django中操作session:

  获取session:request.session[key]  
  
request.session.get(key)**

  设置session:reqeust.session[key] = value

  删除session:del request[key]

 

  request.session是各级一个客户端相当给以达成图被对应的value

 

平等段简单的Django中实现session的代码,判断用户是否早已成功登录:

 1 def login(request):
 2     if request.method =='POST':
 3         username = request.POST.get('username')
 4         pwd = request.POST.get('pwd')
 5         if username =='lisi' and pwd == '12345':
 6             request.session['IS_LOGIN'] = True       设置session
 7             return redirect('/app01/home/')
 8 
 9     return render(request,'login.html')
10 
11 def home(request):
12     is_login = request.session.get('IS_LOGIN',False)   获取session里的值
13     if is_login:
14         return HttpResponse('order')
15     else:
16         return redirect('/app01/login/')

 

 

逾期光阴

cookie可以出逾期时,这样浏览器就是亮啊时可去cookie了。
如果cookie没有装过时,当用户关闭浏览器的时段,cookie就机关过期了。
你得改 SESSION_EXPIRE_AT_BROWSER_CLOSE
的装置来支配session框架的立刻同表现。缺省情况下,
SESSION_EXPIRE_AT_BROWSER_CLOSE 设置为 False
,这样,会话cookie可以以用户浏览器中维系有效达 SESSION_COOKIE_AGE
秒(缺省安是个别两全,即1,209,600 秒)。
如果您切莫思量用户每次打开浏览器还要再次登陆的话,用是参数来帮衬你。如果
SESSION_EXPIRE_AT_BROWSER_CLOSE 设置也 True
,当浏览器关闭时,Django会使cookie失效。

 

SESSION_COOKIE_AGE:设置cookie在浏览器中幸存的日

在settings.py中添加:

图片 6

 

 

例子

结缘前端实现之cookie与session会讲话机制:

图片 7图片 8

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title></title>
 6 </head>
 7 <body>
 8     <form action="/app01/login/" method="post">
 9         <input type="text" name="username" />
10         <input type="password" name="pwd" />
11         <input type="submit" value="submit"/>
12     </form>
13 
14 </body>
15 </html>

login.html

图片 9图片 10

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        .header{
            height: 48px;
        }
    </style>
</head>
<body>
    <div class="header">

        <div style="float: right">{{ username }}</div>
        <div style="float: right"><a href="/app01/logout/">注销</a></div>
    </div>
    <div style="height: 500px;background-color: #ddd"></div>
</body>
</html>

home.html

views.py

def login(request):
    if request.method == "POST":
        username = request.POST.get('username')
        pwd = request.POST.get('pwd')
        if username == 'alex' and pwd == '123':
            request.session['IS_LOGIN'] = True
            request.session['USRNAME'] = 'alex'
            return redirect('/app01/home/')
        elif username == 'eirc' and pwd == '123':
            request.session['IS_LOGIN'] = True
            request.session['USRNAME'] = 'eirc'
            return redirect('/app01/home/')

    return render(request, 'login.html')

def home(request):
    is_login = request.session.get('IS_LOGIN', False)
    if is_login:
        username = request.session.get('USRNAME', False)
        return render(request, 'home.html', {'username': username})
    else:
        return redirect("/app01/login/")

 

网站地图xml地图