💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## session共享 session会话在单台服务器下不会出现共享问题,现在应用部署方式都是分布式,或者集群部署,这样必然会面临一个问题,session共享。 ## session共享的解决方案 web服务器的粘性请求,比如采用nginx请求分发,使用ip_hash这种负载均衡方式,客户端请求只会被分发到相同的后台server,这样可以避免session共享的问题。但是缺点也很明显 基于数据库存储(网站用户量大的情况下,频繁dml数据,对db压力大) 基于cookie存储(安全问题、虽然可以加密存储、但是我觉得永远不能将敏感数据放在客户端,不信任啊O(∩_∩)O哈哈~) 服务器内置的session复制域(比如was下提供session复制功能、但这个损耗服务器内存) 基于nosql(memcache、redis都可以) ![](https://box.kancloud.cn/beb1df4d27528eebc915b63a4c7b729d_1598x680.jpeg) ## HTTP请求是无状态的 这里要引入一个概念sessionid,session对象当客户端首次访问时,创建一个新的session对象.并同时生成一个sessionId,并在此次响应中将sessionId以响应报文的方式写回客户端浏览器内存(内存cookie)或以重写url方式送回客户端,来保持整个会话 也就是说客户端request请求时候,如果获取了session,就默认分配一个sessionid,然后通过response响应到客户端cookie,然后客户端下一次请求,默认会携带这个sessionid请求到服务端,服务端拿到这个sessionid来区分不同的客户端。 说清楚这些,就可以从sessionid入手了,要实现将session信息存入redis. 参考连接:[使用数据库保存session](https://www.imooc.com/video/15867) 当登录成功之后,产生一个token令牌,产生规则的话自己定,一堆密钥比如系统名字+sessionid+userid+固定字符,产生一个加密的字符串,放入cookie。 这样当我们获取当前登录用户时,解密token,获取sessionid,然后取redis用户信息。。(切记这里不要直接通过sessionid取用户信息,有风险!!!) 用户没有登录成功,自然也没有这个令牌。。。