首页 > 其他分享 >Cookie和Session

Cookie和Session

时间:2024-05-09 22:25:32浏览次数:20  
标签:SESSION Session request session cookie Cookie

Cookie大小上限为4KB;
一个服务器最多在客户端浏览器上保存20个Cookie;
一个浏览器最多保存300个Cookie,因为一个浏览器可以访问多个服务器。
cookie设置的数据是明文存储在客户端的,不安全

为了维护登录状态

Http协议

无状态: 不会记录任何客户端和服务端的信息

无连接(closed)(短连接(keepalive)): 一次请求一次响应,就断开连接了.

1606874306656

会话

http协议不能为之会话

cookie 后端服务端给cookie中设置的令牌,键值对形式设置

cookie是浏览器技术,针对的就是http协议无状态,导致不能和服务端维持会话,例子:登录,登录之后,看到响应结果,继续访问其他有页面,服务端要判断

Cookie过程

1606875435700

1606876228911

下次请求自动携带cookie

16068779031251606876411379

网址1: {xx:oo,xx1:oo1}
网址2: {xx:oo,xx1:oo1}
网址3: {xx:oo,xx1:oo1}

每次请求对应网址时,都会自动携带这个网址对应的cookie数据,放到http请求头部信息中.

Cookie在Django中

# 设置cookie(包含添加和修改),键相同时是修改
rep = HttpResponse(...)
rep = render(request, ...)
rep.set_cookie(key,value,...)

## 获取cookie
request.COOKIES  # 是字典
# 获取字段
request.COOKIES['key']
request.COOKIES.get('key')


## 删除cookie
def logout(request):
	ret = redirect('login')
	ret.delete_cookie('is_login')

	return ret


## set_cookie的一些参数
	key, 键

    value='', 值

    max_age=None, 超时时间  单位秒数

    expires=None, 超时时间(IE requires expires, so set it if hasn't been already.).值为时间日期类型数据

	path='/', Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问

	domain=None, Cookie生效的域名
	secure=False, https传输
	httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

Session

数据存储到了服务端

大小无限制

并且表面上比cookie安全一些,最起码不是铭文的.

1606880611836

1606880762310

Django的Session中

#取值
request.session['k1'] 
request.session.get('k1',None) # get方法不报错

# s设置值 (新增和修改)
request.session['k1'] = 123  #键相同的还是修改
request.session.setdefault('k1',123)

## 删除

## 删除单个数据:
    #删除值
	del request.session['k1']
## 删除所有数据
	request.session.flush()
session配置
方法
# 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
    * 如果value是个整数,session会在些秒数后失效。
    * 如果value是个datatime或timedelta,session就会在这个时间后失效。
    * 如果value是0,用户关闭浏览器session就会失效。
    * 如果value是None,session会依赖全局session失效策略。

    
全局配置

1. 数据库Session
SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)

2. 缓存Session
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎
SESSION_CACHE_ALIAS = 'default'                            # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置


3. 文件Session
SESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎
SESSION_FILE_PATH = None                                    # 缓存文件路径(写文件夹路径),如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() 

4. 缓存+数据库
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'        # 引擎

5. 加密Cookie Session
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'   # 引擎

其他公用设置项:
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,Session,request,session,cookie,Cookie
From: https://www.cnblogs.com/wbcde116/p/18183186

相关文章

  • Session相关知识
    什么是Session当用户请求来自应用程序的Web页时,服务器会给每一个用户(浏览器)创建一个Session对象;用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去,默认情况下,只要浏览器没有关闭,这个Session就一直存在。Session的常用......
  • Cookie相关
    cookie的概念cookie是一种客户端会话技术将数据保存到客户端。cookie的利弊:1)将数据保存到客户端,十分方便,同时减轻服务器存储压力2)对保存数据的个数(20)及大小有限制(4kb)作用cookie用来保存少量及不太敏感的数据可以在不登入的情况下,对客户端完成身份识别(即在客户端设置......
  • 配置session——缓存
    1、服务器+redis安装启动2、djangoa、安装链接redis包pipinstalldjango-redisb、settings.py```MIDDLEWARE=['django.contrib.sessions.middleware.SessionMiddleware',]#sessionSESSION_ENGINE='django.contrib.sessions.backends.cache'SESSION_CAC......
  • 配置session——数据库
    INSTALLED_APPS=[......'django.contrib.sessions',......]MIDDLEWARE=[......'django.middleware.common.CommonMiddleware',......]#sessionSESSION_ENGINE='django.contrib.sessions.backends.......
  • 配置session——文件版
    MIDDLEWARE=[......'django.contrib.sessions.middleware.SessionMiddleware',#中间件中会对session进行操作......]#sessionSESSION_ENGINE='django.contrib.sessions.backends.file'#配置session文件版SESSION_FILE_PATH=�......
  • SpringMVC(3)-request域和session域的作用和区别
    最近看到项目中用到request域和session域,脑子里一直没有一个明确的区分,结合GPT整理了一份总结。为了理解request和session的作用和区别,可以想象我们正在参加一个大型的科技会议。会议中,每位与会者(用户)都会与会议工作人员(服务器)进行交流。在这个比喻中,request域和session域是用于......
  • Cookie的细节
    通过responseheader(响应头)把cookie数据发送给浏览器保存,通过request指令服务器可以接收浏览器发送的cookie数据。cookie.setPath("/");//当前Tomcat下的所有web项目都能使用这个cookie。cookie.setMaxAge();//setMaxAge()方法用于设置Cookie的过期时间。它接受一个整数......
  • [web]cookie session和token(jwt)
    cookie:用户登录后,服务器生成一个cookie返回,并要求浏览器set-cookie,存储一下,下次访问时带上cookie,即可区分用户cookie可以被篡改session:信息存储在服务端,客户端cookie中存一个sessionid服务端有额外的存储成本负载均衡需要考虑session共享查询session是查库操作,耗时高......
  • jsrpc获取瑞数请求后缀和cookie
    jsrpc获取瑞数请求后缀和cookie记得加入我们的学习群:961566389点击链接加入群聊:https://h5.qun.qq.com/s/62P0xwrCNO1.分析xhr每次请求都能看到会携带一个请求后缀uB04BPdr:以及每次请求都会更换cookie下的mEsoE3ffu2LGP:这两个就是需要逆向的参数。2.调试因为使用jsrpc......
  • 使用springboot+thymeleaf 在html中获取session
    Controllerimportorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.web.bind.annotation.GetMapping;importjavax.servlet.http.HttpSession;@ControllerpublicclassUserController{@GetMappin......