一、session和sessionid:

sessionid是cookie的一个字段,sessionid一般如下:

 """请求报文"""
"""
GET /myapp1/session/ HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Cookie: login_flag=1; login_name=admin; sessionid=wdsj0ug1yuy634xhqn0ln010ghwk3ofr
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
"""
""""""

这里要明确一个session是存在数据库后端的,cookie是存在客户端(用户)本地的。

sessionid 并不只是可以名字是sessionid,也可以是sid,jsessionid,phpsessionid等等,再来看一个百度的:

 """
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Cookie: BAIDUID=8078C92C8DB5E9579911B40A626F655F:FG=1; BIDUPSID=8078C92C8DB5E9579911B40A626F655F; PSTM=1516783068; BD_HOME=0; H_PS_PSSID=1441_18194_21116_20928
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
"""

来看看相关session的配置文件:

 #配置setting.py

 SESSION_COOKIE_NAME = "sessionid"      # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)

 SESSION_COOKIE_PATH = "/"              # Session的cookie保存的路径(默认)

 SESSION_COOKIE_DOMAIN = None             # Session的cookie保存的域名(默认)

 SESSION_COOKIE_SECURE = False          # 是否Https传输cookie(默认)

 SESSION_COOKIE_HTTPONLY = True         # 是否Session的cookie只支持http传输(默认)

 SESSION_COOKIE_AGE = 1209600             # Session的cookie失效日期(2周)(默认)

 SESSION_EXPIRE_AT_BROWSER_CLOSE = False    # 是否关闭浏览器使得Session过期(默认)

 SESSION_SAVE_EVERY_REQUEST = False        # 是否每次请求都保存Session,默认修改之后才保存(默认)

针对这些配置讲解如何才能更安全:

1、session的路径建议单独保存,切不可再web服务上直接范文。

2、对应的域要配置

3、https肯定要支持

4、过期时间建议不超过2h

5、关闭浏览器过期是必须的

服务器端需要用的很多东西就可以存储在session中而不是sessionid中!例如可以验证码的值存储在sessionid中

例如一个验证码:

可以通过某种图片方式传递到客户端,然后服务器端存储在session中,等待请求报文发过来验证:

 def verify(request):
if request.method != 'POST':
s = uuid.uuid1()
s = str(s)
content = {}
content["code"] = s
request.session["verifycode"] = s
return render(request,"verify.html",content)
else:
if request.POST["code"] == request.session["verifycode"]:
user = request.COOKIES.get("login_name")
print user
print request.COOKIES
if user == None:
return HttpResponseRedirect("/myapp1/login")
response = HttpResponseRedirect("/myapp1/mainpage?name=%s"%user)
response.set_cookie("login_flag","")
return response

可以总结出session的存取:

 #session的读:
request.session["key_name"]
#或者:
request.session.get("key_name")
request.session.get("key_name",None) #session的写:
session["key"] = value """
在Django中要用session中一定要先执行: python manage.py makemigrations python manage.py migrate
"""

其他操作:

 request.session.setdefault('k1',123)  #存在则不设置
del request.session['k1'] #删除键值对
request.session.clear() #删除session #所有 键、值、键值对
request.session.keys()
request.session.values()
request.session.items()
request.session.iterkeys()
request.session.itervalues()
request.session.iteritems() #用户session的随机字符串
request.session.session_key
#将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()
#检查 用户session的随机字符串 在数据库中是否
request.session.exists("session_key")
#删除当前用户的所有Session数据
request.session.delete("session_key")
request.session.set_expiry(value)
#默认的过期时间是两周,如果自己设置了过期时间,这样自己设定的优先级就会高于默认的
#如果value是个整数,session会在些秒数后失效。
#如果value是个datatime或timedelta,session就会在这个时间后失效。
#如果value是0,用户关闭浏览器session就会失效。
#如果value是None,session会依赖全局session失效策略。

最新文章

  1. 5.JAVA之GUI编程窗体事件
  2. ubuntu 入门
  3. visual studio 编辑窗口 设置固定选项卡 使窗口选项卡多行显示
  4. 保证唯一的一种js提交数据方式,还不错
  5. HTML5拖放(drag and drop)与plupload的懒人上传
  6. windows 和 linux ssh互连
  7. P2312 解方程
  8. 安全增强 Linux (SELinux) 剖析
  9. C# 中的事件含义介绍
  10. Window7中Eclipse运行MapReduce程序报错的问题
  11. BZOJ 1008 [HNOI2008]越狱
  12. 游览器对js加载的次序
  13. JavaScript的日期处理
  14. java调用C++ DLL库方法
  15. java设计模式之四建造者模式(Builder)
  16. 【转载】c语言数据的左移右移
  17. angularjs jsonp跨域
  18. [NOI2011]道路修建
  19. Linux Mint有进程管理器吗?答案是肯定的
  20. SAS 函数

热门文章

  1. PHP部分常见算法
  2. centos中安装openjdk
  3. python学习之winreg模块
  4. cnblogs博客迁移到hexo
  5. swift 函数.和匿名函数
  6. Ubuntu安装Nginx和正确卸载Nginx Nginx相关
  7. python操作word(改课文格式)【最终版】
  8. Android App性能測试
  9. 开启Visual Studio 2013时,出现Microsoft.VisualStudio.Web.PasteJson.JsonPackage无法载入的可能解決方案
  10. Windows 只能安装32位虚拟机问题