1、session原理

cookie是保存在用户浏览器端的键值对

session是保存在服务器端的键值对

session服务端中存在的数据为:

session = {

随机字符串1:{

用户1的相关信息

}

随机字符串2:{

用户2的相关信息

}

}

session客户端即客户端的浏览器的cookie中存的数据是当前用户对应的随机字符串

2、session详细解析(是否过期、失效时间)

Session一直是我们做web项目经常使用的,以前没太注意,这次又细致的看了下!

1.session其实就是一个Map,键=值对,通过session.getAttribute("name");获得session中设置的参数

2.session的过期时间是从什么时候开始计算的?是从一登录就开始计算还是说从停止活动开始计算?

答:从session不活动的时候开始计算,如果session一直活动,session就总不会过期。

从该Session未被访问,开始计时; 一旦Session被访问,计时清0;

3、session的工作过程

1、    生成随机字符串

2、    写到用户浏览器的cookie中

3、    保存到session中

4、    在随机字符串对应的字典中设置相关内容

而上述过程在Django中的体现为:

request.session["username"]=user

这里的username为通过request.POST.get("username")从前端html页面中获取到的用户名信息

注意:

在Django中要用session中一定要先执行:

python manage.py makemigrations

python manage.py migrate

当用户登录的时候的就会在数据库的django_session表中记录session信息

同样的通过request.session["username"]也可以获取相应的值

在这个过程中:

1、    首先获取当前用户的随机字符串

2、    根据随机字符串获取对应的内容

4、session的操作

request.session["k1"]  如果不存在则会报错

request.session.get["k1"],如果不存在则会报错,为了防止出错可以request.session.get('k1',none)

request.session['k1'] = 123 设置session值

request.session.setdefault('k1',123)  存在则不设置

del request.session['k1']  删除

request.session.clear()    删除

所有 键、值、键值对

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")

5、session 的超时时间设置

5.1、django中 settings中的设置

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,默认修改之后才保存(默认)

Session使用比较简单,在request.session是一个字典类。session是保存在数据库中的。

5.2、在views中的设置

request.session.set_expiry(value)

默认的过期时间是两周,如果自己设置了过期时间,这样自己设定的优先级就会高于默认的

如果value是个整数,session会在些秒数后失效。

如果value是个datatime或timedelta,session就会在这个时间后失效。

如果value是0,用户关闭浏览器session就会失效。

如果value是None,session会依赖全局session失效策略。

注意:

Django中设置session过期时间:

request.session.set_expiry(timedelta(days=30))

运行提示错误:TypeError: datetime.datetime(2018, 7, 3, 7, 36, 57, 636224, tzinfo=) is not JSON serializable

解决办法:

在setting中添加:

SESSION_SERIALIZER='django.contrib.sessions.serializers.PickleSerializer'

6、Django中对于session的存储方式

Django中支持session,其中内部提供了5种类型的session供开发者使用:

数据库(默认)

缓存

文件

缓存+数据库

加密cookie

1、如果是数据库,需要在settings.py中配置如下:

SESSION_ENGINE = 'django.contrib.sessions.backends.db' (引擎(默认))

2、如果是缓存session,需要在settings.py中配置如下:

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'(引擎)

SESSION_CACHE_ALIAS= 'default'  使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置

1、    如果是文件session, 需要在settings.py中配置如下:

SESSION_ENGINE = 'django.contrib.sessions.backends.file' (引擎)

SESSION_FILE_PATH=None  缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()

2、    如果是缓存+数据库session,需要在settings.py中配置如下:

SESSION_ENGINE='django.contrib.sessions.backends.cached_db'       (引擎)

7、session的过期判断;

1)  以前是根据 if(session.getAttribute('user')==null)判断是否为空

=========================================================================================

2) 如下为看到的一个帖子,判断session不为空的好方法:

request.getSeesion(boolean)方法,一下子让我恍然大悟。这个方法里面传了一个boolean值,这个值如果是true,那么如   果当前的request的session不可用,那么就创建新的会话,如果存在就返回当前的会话。如果参数是false,那么在request的当前会话不存在的时候就返回null。

这样我们就可以很容易的联想到这个所谓的request的当前会话是否存在和session过期的联系,所以我们就可以“近似地”认为session不存在就是session过期了,那么我们就可以很容易地判断session是否过期了。方法如下:

if(request.getSession(false)==null){

System.out.println("Session has been invalidated!");

}

else{

System.out.println("Session is active!");

}

可能大家注意到我上面有一个“近似地”字眼,也就是说存在特别情况。

这个特殊情况就是第一次请求还没有创建会话的时候,那么用这个方法返回的仍然是null

python session过期_session的工作原理、django的超时时间设置及session过期判断相关推荐

  1. cookie和session、web服务工作原理、Apache配置php扩展、php简介

    cookie和session: cookie和session区别:cookie数据是存在本地的,而session数据是存在服务端的,session比cookie更安全. cookie:用于http做会 ...

  2. Cookie和Session的作用和工作原理

    一.Cookie详解 (1)简介 因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现.在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两饮料 ...

  3. apache 设置session超时时间_深入分析 Session 和 Cookie,看这篇就对了

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 第一时间与你相约 每日英文 Promise yourself to be so strong that nothing can ...

  4. session 超时时间设置

    在Java Web开发中,Session为我们提供了很多方便,Session是由浏览器和服务器之间维护的.Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠时 ...

  5. session的工作原理[择]

    session的工作原理 一.术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是 ...

  6. Session的工作原理

    session是服务器端的一个集合,可以存储任何东西.session最重要的特性,是可以识别客户. 1.Session的工作原理 当我们的Servlet需要使用Session时,执行下面的代码 Htt ...

  7. Seesion工作原理

    session的工作原理 一.术语session  在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义 ...

  8. sysctl.conf工作原理

    2019独角兽企业重金招聘Python工程师标准>>> sysctl.conf工作原理 sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/s ...

  9. ASP.NET页面与IIS底层交互和工作原理详解(一)

    第一回: 引言 我查阅过不少Asp.Net的书籍,发现大多数作者都是站在一个比较高的层次上讲解Asp.Net.他们耐心.细致地告诉你如何一步步拖放控件.设置控件属性.编写CodeBehind代码,以实 ...

  10. LNMP与LAMP的工作原理

    2019独角兽企业重金招聘Python工程师标准>>> LNMP的工作原理  首先解释一下LNMP的意思,我第一看到的时候感觉很高大上,后来才知道原来指的是Linux+Nginx+M ...

最新文章

  1. Linux有问必答:如何扩展XFS文件系统
  2. 9.NoSQL数据库第1部分
  3. MySql中的运算符
  4. 北京那些年轻人的秘密,都藏在这篇文章里
  5. php正则获取标签,PHP通过正则匹配中文字符 过滤html标签 获取文本内容
  6. 山东省2021年高考成绩查询平台6,山东2021年高考成绩改为6月26日前公布
  7. C#LeetCode刷题之#771-宝石与石头(Jewels and Stones)
  8. AOP拦截器 表达式写法
  9. 壁纸图片|2020年12月游戏图片大全
  10. C/C++(C++返回对象与应用区别,类成员的存储)
  11. 王者荣耀英雄铭文;出装
  12. protues仿真之数码管消影问题
  13. 某银行Zabbix开源监控系统建设之路
  14. 【2020年高被引学者】 杨笛一 佐治亚理工大学
  15. 育儿心得,所有适龄女青年都该看一下(转)
  16. cmd命令行进行C++代码编译运行;实现进程调度和存储管理
  17. R语言实战-第九章 R in action-chapter9
  18. 使用浏览器自带打印功能,去除页眉页脚,横屏打印等
  19. buuctf old-fashion 1 世上无难事
  20. electron-vue-element从零搭建项目(一)

热门文章

  1. I2c-tools工具使用及调试
  2. pdf转图片文字丢失,字体映射替换
  3. oracle中聚合比较函数,Oracle 分析函数与聚合函数区别
  4. sql获取3天前日期
  5. ztree的select设置,完笔
  6. [C/C++]Windows下的getch函数实现
  7. AXURE中SVG矢量图标的使用方法,以及图标颜色的改变方法
  8. Java开发过程中碰到的问题及解决方案
  9. CSDN帐号管理规范
  10. 美国要贩卖网民隐私:最大成人网站出手反击