博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django中cookies和session
阅读量:5915 次
发布时间:2019-06-19

本文共 2162 字,大约阅读时间需要 7 分钟。

django中cookies和session是两个经常使用的用户认证工具。都是类似于字典的数据类型,都是request的内部属性

cookies的读写方法

cookies读,比如usernameusername=request.COOKIES['username']
cookies写,比如username='book'.需要使用 HttpResponse对象的 set_cookie()方法response.set_cookie("username","book")

sessions设置就比较简单

session读username=request.session['username']session写session['username']='book'

2 session中一般使用字符串作为key来操作,尽量不要使用下划线开始的字符串来作为key,常常会导致糟糕的结果。

3 在使用cookies之前一般需要认证用户是否可以使用cookies,测试cookies的方法如下

在view试图函数中调用request.session.set_test_cookie()来设置是不够的,一般需要两部操作。在提交数据的时候检查 request.session.test_cookie_worked(),他会返回True或False。如果成功需要删除cookies。使用request.session.delete_test_cookie()。

def login(request):    # If we submitted the form...    if request.method == 'POST':        # Check that the test cookie worked (we set it below):        if request.session.test_cookie_worked():            # The test cookie worked, so delete it.            request.session.delete_test_cookie()            # In practice, we'd need some logic to check username/password            # here, but since this is an example...            return HttpResponse("You're logged in.")        # The test cookie failed, so display an error message. If this        # were a real site, we'd want to display a friendlier message.        else:            return HttpResponse("Please enable cookies and try again.")    # If we didn't post, send the test cookie along with the login form.    request.session.set_test_cookie()    return render_to_response('foo/login_form.html')

4 设置cookies和session失效时间,在setting文件中

默认情况下SESSION_EXPIRE_AT_BROWSER_CLOSE 设置为 False ,这样,会话cookie可以在用户浏览器中保持有效达 SESSION_COOKIE_AGE 秒(缺省设置是两周,即1,209,600 秒)

如果 SESSION_EXPIRE_AT_BROWSER_CLOSE = True ,当浏览器关闭时,Django会使cookie失效。

5 django何时会修改session中的值

默认情况下,Django只会在session发生变化的时候才会存入数据库,比如说,字典赋值或删除

# Session is modified.request.session['foo'] = 'bar'# Session is modified.del request.session['foo']# Session is modified.request.session['foo'] = {}# Gotcha: Session is NOT modified, because this alters# request.session['foo'] instead of request.session.request.session['foo']['bar'] = 'baz'

你可以设置 SESSION_SAVE_EVERY_REQUEST 为 True 来改变这一缺省行为。如果置为True的话,Django会在每次收到请求的时候保存session,即使没发生变化。

转载地址:http://pkwvx.baihongyu.com/

你可能感兴趣的文章
一个排序算法的解析
查看>>
【HDU】1848 Fibonacci again and again
查看>>
老鸟的Python新手教程
查看>>
关于前端开发的20篇文档与指南
查看>>
程序员保持快乐活跃的6个好习惯(转)
查看>>
【转】linux /usr/bin/ld cannot find 解决
查看>>
T-SQL技术收集——删除重复数据
查看>>
SQL中各数据类型的长度、精度
查看>>
openfire群消息投递
查看>>
MySql(十):MySQL性能调优——MySQL Server性能优化
查看>>
(原創) 11/10/1982 セカンド・ラブ (中森明菜)
查看>>
(原創) 如何將string轉成integer? (SOC) (Verilog PLI)
查看>>
DevExpress VCL的多语言支持文件
查看>>
C语言的谜题
查看>>
HTML Agility Pack 搭配 ScrapySharp,彻底解除Html解析的痛苦
查看>>
[Leetcode] Integer to Roman
查看>>
[Windows Azure] Monitoring SQL Database Using Dynamic Management Views
查看>>
更好使用jQuery的8个小技巧
查看>>
推荐系统实践 - 第1章
查看>>
linux文件操作
查看>>