Session

1、Session和Cookie的作用有点类似,都是为了存储用户相关的信息。不同的是:
    ⑴Cookie是存储在本地浏览器中(实际存在的)
    ⑵Session是一个思路、一个概念、一个服务器存储授权信息的解决方案,不同的服务器,不同的框架,不同的语言有不同的实现
    ⑶虽然Session实现方式不一致,但是它们的目的都是服务器为了方便存储数据的。Session的出现,是为了解决Cookie存储数据不安全的问题

2、Cookie是在浏览器端保存键值对数据,而Session是在服务器端保存键值对数据

3、Session的使用依赖Cookie:在使用Session后,会在Cookie中存储一个Sessionid的数据,每次请求时浏览器都会将这个数据发给服务器,服务器在接收到Sessionid后,会根据这个值找出这个请求者的Session

4、Cookie和Session的使用:Web开发发展至今,Cookie和Session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业中,一般有两种存储方式
    ⑴存储在服务器端:如果用户已经登录,则服务器会在Cookie中存储一个Sessionid,下次再请求的时候,会把这个Sessionid携带上来,服务器根据Sessionid在Session库中获取用户的Session数据。就能知道用户是谁了
    ⑵将Session数据加密,然后存储在Cookie中,这种专业术语叫client side session。flask框架默认采用的就是这种方式

5、Session是在用户访问的时候,创建一个随机的字符串,保存在客户端的Cookie里面,默认名是sessionid,然后在服务器端,给这个字符串创建一个键值对,这个字符串的值又可以是一个字典结构,保存所有相关的信息
    ⑴因此可以这么理解,Session是服务器端的一个巨大的键值对,每一个key都对应一个登录用户的随机字符串,每个key都有自己的value,这个value同样是一个字典,包括这个登录账号的所有信息

 

Django中Session的存储

1、在Django中session信息采用的是存储在服务器端的方式:存储在数据库中

2、Django把session信息默认存储到数据库中,当然也可以存储到其他地方,比如缓存中,文件系统中等。存储在服务器的数据会更加安全,不容易被窃取。但存储在服务器中也有一定的弊端,就是会占用服务器的资源。但是服务器已经发展至今,存一些Session信息还是绰绰有余的

3、Django中Session键值对数据保存:
    ⑴session的键值对数据默认保存在django项目的一张数据库表中(表名为:django_session)
    ⑵django_session这个表在配置数据库并生成具体的表时会自动生成:Django默认配置好的,只需要执行命令生成具体的表就好了

4、Django会在表中会根据Sessionid来提取指定的Session数据
    ⑴浏览器第一次访问时生成Sessionid和具体的Session数据,将Sessionid和Session数据保存到数据库中,再把这个Sessionid放到Cookie中发送给浏览器存储
    ⑵浏览器下次向服务器发送请求的时候会自动的把所有的Cookie信息都发送给服务器,服务器再从Cookie中获取Sessionid,然后从数据库中获取Session数据

5、Django中默认支持Session,其内部提供了5种类型的Session供开发者使用:
    ⑴数据库(默认,本篇文章介绍这个)
    ⑵缓存
    ⑶文件
    ⑷缓存+数据库
    ⑸加密cookie

例1:
⑴数据保存原理

Session_Django中操作session

⑵Session保存示例

Session_Django中操作session

 

Django中操作Session

1、前面介绍了在Django中Session数据是保存在数据库中的。但是我们在操作Session的时候,这些细节不需要我们过多的关注,我们只需要通过request.session即可操作

2、Django中Session的基本操作:

方法   描述
request.session['键']=值 以键值对的格式写session
request.session.get('键',默认值)  根据键读取值
request.session['键']   同上:根据键读取值
request.session.clear()  清除当前这个用户的session数据
request.session.flush()   删除session并删除在浏览器中存储的sessionid,一般在注销的时候用得比较多
del request.session['键'] 删除session中的指定键及值,在存储中只删除某个键及对应的值
request.pop['键']  删除session中的指定键及值,并返回删除的键值对
request.keys  从session中获取所有的键
request.items 从session中获取所有的值
request.session.set_expiry(value)  设置session数据有效时间; 如果不设置,默认过期时间为两周
request.session.clear_expiry()  清除过期的session,Django不会自动清理过期的session。需手动清理

 

Session方法介绍

设置Session

1、方法:request.session['键']=值

2、注意:操作Session信息是通过request对象来操作的,而设置Cookie信息是通过resopnse对象来操作的

例2:
⑴编辑视图

Session_Django中操作session

⑵访问

Session_Django中操作session

⑶查看数据库

Session_Django中操作session

 

get()

1、作用:根据传入的键名来获取对应的值

2、注:因为Session信息是以字典(键值对)的形式存储的,所以还可以使用request.session['键']

例3:
⑴编辑视图

Session_Django中操作session

⑵访问

Session_Django中操作session

keys()

1、作用从session中获取所有的键

例4:
⑴编辑视图

Session_Django中操作session

 

items()

1、作用:从session中获取所有的值

例5:
⑴编辑视图

Session_Django中操作session


clear()

1、作用:清除当前这个用户的session数据

2、数据库中的数据会变化:数据还存在,但是其值实际上是一个空字符串加密后的

例6:
⑴编辑视图

Session_Django中操作session

⑵查看数据库

Session_Django中操作session

 

flush()

1、删除session并删除在浏览器中存储的sessionid,一般在注销的时候用得比较多

2、数据库中的数据会变化:直接删除该用户的session数据

例7:
⑴编辑视图

Session_Django中操作session

⑵查看数据库

Session_Django中操作session

 

set_expiry(value)    

1、作用:设置session数据有效时间; 如果不设置,默认过期时间为两周

2、参数:value
    ⑴如果过期时间的value是一个整数:则session数据将在value秒后过期
    ⑵如果过期时间的value为None:会使用全局的session配置。在settings.py中可以设置SESSION_COOKIE_AGE来配置全局的过期时间。默认是1209600秒,也就是2周的时间
    ⑶如果过期时间的value为0:那么用户会话的Cookie 将在用户的浏览器关闭时过期

例8:值为整数
⑴编辑视图

Session_Django中操作session

⑵访问

Session_Django中操作session

⑶查看数据库

Session_Django中操作session


例8_1:值为None

⑴编辑视图

Session_Django中操作session

⑵查看数据库

Session_Django中操作session

⑶修改配置具体可以看这篇文章:bigyoung/p/bigyoung.html

Session_Django中操作session⑷访问

Session_Django中操作session


 

相关文章: