cookie

集群session一致性和同步问题

谁说胖子不能爱 提交于 2020-02-12 02:18:48
一. 何为session 用户使用网站的服务,基本上需要浏览器和web服务器进行多次交互,web服务器如何知道哪些请求是来自哪个会话的? 具体方式为:在会话开始时,分配一个唯一的会话标识(sessionId),通过cookie把这个标识告诉浏览器,以后每次请求的时候,浏览器都会带上这个会话标识来告诉web服务器请求是属于哪个会话的。 如果遇到禁用cookie的情况,一般的做法就是把这个会话标识放到url的参数中。 二. 问题 因为会话信息保存在单机上,当我们的应用服务器从一台变成两台后,我们就会遇到session的问题了! 当我们第一次访问网站时请求落到了A服务器,那么我的session就创建在A服务器上了,如果我们不做处理,就不能保证接下来的请求每次都落在同一台服务器上了,这就是session问题。 三. 解决办法: 1. session sticky 在web服务器变成多台后,如果我们可以保证同一个会话请求都能在同一个web服务器上处理,那么对于这个会话个体来说,和单机的情况是一样的。这就需要负载均衡器能够根据每次请求的会话标识来进行请求转发。 有何问题: ① 如果有一台web服务器宕机或重启,那么这台机器上的会话数据会丢失 ② 负载均衡器变成了一个有状态的结点,要保存会话到具体web服务器的映射,要消耗一定的内存。 2. session replication

Cookie和Session

被刻印的时光 ゝ 提交于 2020-02-12 02:09:32
Cookie的由来 大家都知道HTTP协议是无状态的。 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不会直接影响后面的请求响应情况。 一句有意思的话来描述就是人生只如初见,对服务器来说,每次的请求都是全新的。 状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被保留。会话中产生的数据又是我们需要保存的,也就是说要“保持状态”。因此Cookie就是在这样一个场景下诞生。 什么是Cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息。 Cookie的原理 cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上Cookie,这样服务器就能通过Cookie的内容来判断这个是“谁”了。 查看 Cookie 我们使用Chrome浏览器,打开开发者工具。 Django中操作Cookie   获取Cookie request.COOKIES['key'] request.get_signed_cookie('key', default=RAISE_ERROR, salt='', max_age=None) get_signed

单点登录SSO

一曲冷凌霜 提交于 2020-02-12 02:08:56
单点登录SSO实现情景分析 单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。单点登录在大型网站里使用得非常频繁,例如像阿里巴巴这样的网站,在网站的背后是成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都需要用户认证,不仅用户会疯掉,各子系统也会为这种重复认证授权的逻辑搞疯掉。实现单点登录说到底就是要解决如何产生和存储那个信任,再就是其他系统如何验证这个信任的有效性,因此要点也就以下两个: 存储信任 验证信任 如果一个系统做到了开头所讲的效果,也就算单点登录,单点登录有不同的实现方式,本文就罗列我开发中所遇见过的实现方式。 1.以COOKIE作为凭证媒介 最简单的单点登录实现方式,是使用cookie作为媒介,存放用户凭证。 用户登录父应用之后,应用返回一个加密的cookie,当用户访问子应用的时候,携带上这个cookie,授权应用解密cookie并进行校验,校验通过则登录当前用户。 不难发现以上方式把信任存储在客户端的Cookie中,这种方式很容易令人质疑: Cookie不安全 不能跨域实现免登 对于第一个问题,通过加密Cookie可以保证安全性,当然这是在源代码不泄露的前提下。如果Cookie的加密算法泄露

爬虫遇到521错误怎么办

拟墨画扇 提交于 2020-02-11 20:40:10
  本人最近用 python 开发着爬虫相关的项目,在上个月就已经把爬虫的相关代码写得差不多了,因为春节,项目停滞了十多天。最近,当我再次运行之前的爬虫项目的时候, What ?怎么不行了??本来好好的,报了 521 错误。我只是一个爬虫菜鸟,还是第一次接触到这个错误。然后我就去百度了。百度一圈后,发现这是一个 js 设置 cookie 的反爬方式。于是乎我将 521 返回的内容写到了 txt 文件里,显示出来是这样的结果。    太乱了,这样子啥也看不出来呀。后来突然想到,这就是 js 代码呀,写到 html 文件里再排版不就行了吗。这里说一下我用的编辑器是pycharm,打开了html代码后,使用快捷键'crtl+alt+l'一键排版,就好看多了。   随后,我百度到,把这一串代码的js部分复制到Console中,将eval改成console.log运行。 结果出现了这个错误,没怎么接触前端的我就傻逼了,这啥错啊。   又百度了一会才发现,原来在后面的</script>前还有一个‘}’,写上去之后,可以正常运行了。得到了这个结果。   一看,怎么这么眼熟,这就是js里面的代码呀。然后我就想,打印出了这个结果,那是不是执行过程中,js会将这两行代码替换上去再执行的呢。然后我就将两行eval替换成打印出来这两行后再去执行。突然页面就直接跳转了一下。嗯?怎么就跳转了呢?后来想到

Session机制详解

天涯浪子 提交于 2020-02-11 20:06:59
Session机制详解 虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术。本文将详细讨论session的工作机制并且对在Java web application中应用session机制时常见的问题作出解答。 一、术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是相同的。 session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。有时候我们可以看到这样的话“在一个浏览器会话期间,...”,这里的会话一词用的就是其本义,是指从 一个浏览器窗口打开到关闭这个期间 ①。最混乱的是“用户(客户端)在一次会话期间”这样一句话,它可能指用户的一系列动作(一般情况下是同某个具体目的相关的一系列动作,比如从登录到选购商品到结账登出这样一个网上购物的过程,有时候也被称为一个transaction),然而有时候 也可能仅仅是指一次连接 ,也有可能是指含义①,其中的差别只能靠上下文来推断②。 然而当session一词与网络协议相关联时,它又往往隐含了“ 面向连接”和/或“保持状态”这样两个含义 ,

django框架进阶-cookie和session-长期维护

狂风中的少年 提交于 2020-02-11 07:20:19
############### python基础回顾:装饰器 ################ # 装饰器非常重要,1是写代码的时候,2是面试的时候,没有python开发不问装饰器的, # 装饰器绕不过去,一定会用到,不会装饰器不要说会python, # 理解Python装饰器(Decorator) # 想要理解Python中的装饰器,不得不先理解闭包(closure)这一概念。 # 闭包: # 就是一个函数里面又套上另一个函数的定义,你反而要用的是内部函数,而且内部函数会用到外部函数的变量,这种方式我们就成为闭包, # 我们把外部函数的变量和内部函数这个整体,我们称之为闭包, # 开放封闭原则: # 写代码需要遵循开放封闭原则,简单来说就是,他规定已经实现的代码功能不允许被修改,但是可以被扩展, # 封闭:已实现的功能 # 开放:对封闭的代码进行拓展开发, # 为什么已经实现的代码不允许被修改?因为这个代码可能很多地方都用到了,你改动了会影响一大片, # 所以使用装饰器,在不影响原有代码的基础上,动态的给函数加功能,但是要么在函数之前做事情,要么在函数之后做事情,不能在函数之中做事情 # 装饰器的应用: # 可以用来计算程序执行的时间 # 可以用来做加验证, 下面使用装饰器的思想来实现登陆的校验功能: ############### django-cookie的操作 ######

2020 HGAME WEB_Week3[cosmos的留言板-2](基于时间的盲注)

假如想象 提交于 2020-02-10 21:35:45
cosmos的留言板 涉及内容 SQL注入 打开页面,先常规操作一波,试试都有什么功能。 在删除留言的时候发现URL有个参数是id,怀疑是注入点,测试一下发现确实是。 发现没有详细回显,简单测试以后感觉没有过滤,输入函数的话会被直接执行。 想到用时间盲注,先试了下用 sleep() 注入,结果发现返回时间没有变化,但是同位置放上其他函数会被执行,猜测 sleep 可能被处理了。 直接用这个玩意代替sleep: benchmark(500000000,database()) 也就是将 database() 函数执行500000000次。 然后直接爆破就可以了。直接贴脚本: (别问我为什么写得又臭又长,问就是在家太无聊了) import requests import time cookie = { 'PHPSESSID' : '80l2vg0sueib35cqha8bbphnkp' } db_len = 1 while True : url_dblen = r "http://139.199.182.61:19999/index.php?method=delete&delete_id=if(length(database())%3d" + str ( db_len ) + ",benchmark(500000000,database()),1);+--+" start = time

[牛客网中级项目]第四课 注册 登录 浏览 安全性

自作多情 提交于 2020-02-10 18:08:41
[牛客网中级项目]第四课 注册 登录 浏览 安全性 目录 文章目录 [牛客网中级项目]第四课 注册 登录 浏览 安全性 1. 注册 1.1 注册实现功能: 1. 用户名合法性检测 2. 密码长度要求 3. 密码Salt加密,密码强度检测 4. 用户邮件/短信激活 1.2 代码功能实现: UserDAO部分 UserService部分 LoginController部分 2. 登录 2.1 登录实现功能: 1. 服务器密码校验/三方校验回调,token登记 1.1 服务器端token关联userid 1.2 客户端存储token 2. 服务端/客户端token有效期设置 2.2 代码功能实现: LoginTicketDAO部分 UserService部分 LoginController部分 3. 浏览页面(重点) 3.1注册实现功能: 1. 客户端:带token的HTTP请求 2. 服务端: 1.根据token获取用户id 2.根据用户id获取用户的具体信息 3.用户和界面访问权限处理 4.渲染界面/跳转页面 3.2代码功能实现: 拦截器(Interceptor) 未登录跳转 注册拦截器 4.用户数据安全性 多种渠道: 1.HTTP注册页 2.公钥加密私钥解密,支付宝h5页面的支付密码加密 3.用户密码salt防止破解(CSDN,网易邮箱未加密密码泄露) 4.token有效期 5

Django面试集锦(1-50)

僤鯓⒐⒋嵵緔 提交于 2020-02-10 18:06:39
目录 1、Django ORM查询中select_related和prefetch_related的区别? 2、only与defer的用法? 3、Django ORM是什么? 4、Django创建项目命令? 5、Django创建项目后,项目文件下的组成部分?(对MVT的理解) 6、对MVC,MTV模型的理解? 6、Django中models利用ORM对Mysql进行查表的语句? 7、Django中间件的使用? 8、Django生命周期流程图? 9、谈一下对uWSGI和nginx的理解? 10、说一下nginx和uWISG服务器之间如何配合工作的? 11、Django开发中数据库做过什么优化? 12、验证码过期时间怎么设置? 13、python中三大框架各自的应用场景? 14、Django如何提升性能(高并发)? 15、什么是restful api,谈谈你的理解? 16、如何设计符合RESTful风格的API? 16、Django关闭浏览器,怎么清除cookies和session? 17、简述Django下的缓存机制? 18、对cookie和session的了解?他们能单独使用吗? 19、Django中QuerySet的get和filter方法的区别? 20、Django对数据查询结果排序的做法? 21、数据库的迁移命令? 22、uWSGI与uwsgi区别? 23

flask 视图函数的使用

主宰稳场 提交于 2020-02-10 04:49:35
flask框架 视图函数当中 各种实用情况简单配置 1 建立连接 2 路由参数 3 返回网络状态码 4 自定义错误页面 5 重定向 6 正则url限制 和 url 优化 7 设置和获取cookie 1 #coding:utf8 2 # 导入flask 3 from flask import Flask,abort,redirect,make_response,request 4 from werkzeug.routing import BaseConverter 5 6 7 # Flask 接受一个参数__name__ 作用是指明应用的位置 8 app = Flask(__name__) 9 10 11 12 ''' 13 1 建立一个前后台链接 14 装饰器的作用是陆游映射到视图函数index 15 访问根目录就会进入index视图函数 16 ''' 17 @app.route('/') 18 def index(): 19 # 返回后会调用make_response 20 return "你好 世界!" 21 22 23 ''' 24 2 给路由传参数 25 传递的参数在<name>当中 这个变量名称也要传递给视图函数 26 可以在<int:name> 或者<string:name> 指定传递参数的类型 27 不指定类型默认使用string类型 28 ''' 29 @app