首页 技术 正文
技术 2022年11月20日
0 收藏 601 点赞 3,885 浏览 3263 个字

一、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失效策略。
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,077
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,552
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,401
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,813
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,896