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

cookies的读写方法

cookies读,比如username
username=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,即使没发生变化。

django中cookies和session的更多相关文章

  1. 19 02 03 django 中cookies 和 session 和 cache

    Session 是单用户的会话状态.当用户访问网站时,产生一个 sessionid.并存在于 cookies中.每次向服务器请求时,发送这个 cookies,再从服务器中检索是否有这个 session ...

  2. Django中cookie和session

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  3. django之cookies,session 、中间件及跨站请求伪造

    cookies 和session 为什么会有cookie? ​ 由于http协议是无状态的,即用户访问过后,不留痕迹(状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被 ...

  4. Django中cookie和session的操作

    一.cookie和session cookie:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是 ...

  5. Django中Cookie和Session配置和操作

    Cookie Cookie以键值对Key-Value形势进行信息的存储. Cookie基于域名安全,不同域名的Cookie是不能互相访问的 Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏 ...

  6. django 中 cookie与session 相关的知识

    cookie :它是一个字典  

  7. Django中cookie和session使用

    cookie和session的简单使用 def cookie(request): """ 操作cookie """ resp = HttpR ...

  8. Django中的分页,cookies与session

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  9. {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session

    Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...

随机推荐

  1. 常见MIME类型

    Response对象通过设置ContentType使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据.  MIME类型格式:类别/子类别;参数 Co ...

  2. RUP---统一软件开发过程

    更详细的见:http://www.ibm.com/developerworks/cn/rational/r-rupbp/ 本文引用:http://baike.baidu.com/view/223583 ...

  3. IETESTER ie10.local 下载

    下载地址:ietester.ie10.exe.local.zip 技术交流QQ群: 15129679

  4. Python编程-基础知识-List

    Negative Indexes(负索引) >>> spam = ['cat', 'bat', 'rat', 'elephant'] >>> spam[-1] 'e ...

  5. CSRF(跨站请求伪造攻击)漏洞详解

    Cross-Site Request Forgery(CSRF),中文一般译作跨站点 请求伪造.经常入选owasp漏洞列表Top10,在当前web漏洞排行中,与XSS和SQL注入并列前三.与前两者相比 ...

  6. Linux文件类型(学习笔记六)

    一.Linux下的文件类型 普通文件:在由 ls –al 所显示出来的属性方面,第一个属性为 [ - ] 目录文件:在由 ls –al 所显示出来的属性方面,第一个属性为 [ d ] 设备文件:一般都 ...

  7. UVA 357 Let Me Count The Ways(全然背包)

    UVA 357 Let Me Count The Ways(全然背包) http://uva.onlinejudge.org/index.php?option=com_onlinejudge& ...

  8. 在Ubuntu下设置默认编辑器

    在默认情况下,Ubuntu 系统会为用户预设程序.就拿文本编辑器来说吧,Ubuntu 预设的是 Nano,对某些朋友来说,使用 Vim 可能更得心应手些.那么如何更改这些预设的程序呢? 你可以使用 s ...

  9. [Done]Spring @Pointcut 切点调用不到(SpringAOP嵌套方法不起作用) 注意事项

    今天在开发过程中,遇到一个问题卡了很久,测试代码如下: package spring.pointcut; import org.aspectj.lang.ProceedingJoinPoint; im ...

  10. 类的专有方法(__len__)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #http://www.imooc.com/code/6252 #类的专有方法(__len__) #如果一个类 ...