怎么用session保持登入状态

怎么用session保持登入状态,第1张

session是一个会话范围,一般就是用来储存用户登陆状态信息的sessionsetAttribute("user","xxx");//储存进去sessiongetAttribute("user");//要验证的页面取出来判断是否和你储存进去的是否一样就行了(一般都用过滤器做)

自定义函数求两个数组的和,要求在主函数中进行调用的方法: int fun(int a[],int na,int b[],int nb)//必须传入数组的大小,经过参数传递后,编译器已经不记得数组有几个元素了。sizeof(a)的值为4 { int sum=0; int i=0; for(;i

这个我刚刚研究说。如果信息是实时的,那就复杂了。

简单的说,网页上的实时聊天都是刷出来的,就是客户端不停的提交请求给服务器,看看有没有最新信息。我也是刚开始学,所以性能上好不好我说的不一定对。只是个人看法。

最新的有web socket,据说这个性能上不错,不过我试过了,ie浏览器的支持不好,好像10以后才支持,我测的8不行。火狐用着不错。

先说传统的ajax吧,最笨的实时聊天的方法就是定时用ajax刷,也就是5秒钟刷一次,看看服务器里有没有新信息,ajax能给人一种静态刷新的体验,就是网页不用刷新,新内容自己就蹦出来了。但是呢,非常明显,如果用户没在 *** 作就在这挂机呢,或者没有新信息的时候,ajax发送了很多无用的请求。

至于这个推技术,我就看了dwr的推技术。有前辈说这个也是逃脱不了刷这个模式,只不过是封装了一下。具体我没研究。找了个demo自己测了一下。同一个浏览器打开的时候会产生一个session,也就是不管你在一个浏览器上打开多少窗口,你这个sessionid都是唯一的。同一个站点同一浏览器登录多账号,这个需求本身就不合理,这不明摆着让用户开小号呢么。先不说这个了,正题:

在我找的这个demo里,用户身份是用sessionid区分,一对一的会话里,是要把所有session都遍历一遍找到接受者的id,然后给这个页面“推”。这个推你找个例子就明白了,它是可以在java底层里面直接刷页面的。具体怎么实现,都有函数的。页面怎么刷就不用管了,dwr都封装好了。

我也在纠结这个聊天记录放到哪,人人网的聊天是入库的,和留言板是一个功能,只不过聊天的都是悄悄话。像58同城就不是入库的。

我想过用session,但是如果用户很多的话,很占内存,内存溢出了就什么都没了。如果放cookie里,单个站点的cookie有大小限制的,好像是4K(忘了在哪看到的了)。

或者放数据库里吧,如果不想存太多的话就定时清一下。其实也不麻烦的,用户的在线状态你是怎么保存的?我测的时候,如果浏览器关闭,session其实是没清除的。总要定期检查用户是否在线吧,session如何回收还要配置一下。

我想了一个方法把聊天窗口写成一个iframe,不过还没实施。

还有用长连接和flash的,不好意思我水平不够,没看懂

本文以抖音小程序(微信小程序获取流程和接口一模一样)为例,最近博主在做一个抖音小程序的小项目,前端在获取用户手机号的时候,需要调用 ttlogin 接口进行登录,登录后返回一个code,这个code有3分钟的失效时间,根据这个code可以获取到sessionKey,这个sessionKey类似于对称加密的密钥,会对用户信息进行加密。在获取用户信息的时候,前端

需要将 <button> 组件 open-type 的值设置为 getPhoneNumber。用户点击后会d出一个授权d窗让用户确认(若该用户账户未绑定手机号码会执行一次绑定手机号码的流程;授权d窗每次使用都会d出)。 用户同意后,开发者可以通过 bindgetphonenumber 事件回调获取到一个加密数据,开发者可以把该数据传回到自己的服务端进行解密获取手机号。

获取到的加密数据需要使用sessionKey进行解密,因此在获取用户信息前,需要登录一次,获取到code,然后根据code获取到sessionKey,再根据sessionKey进行加密数据的解密,解析出手机号。

根据博主猜测,抖音在登录后会生成一个code,和一个对应的sessionKey,在会话期间(session未过期)的时候获取用户信息,会将用户信息使用sessionKey进行数据的加密,进行数据的解密也需要使用到sessionKey。code和sessionKey是对应的,但是它们的失效期是不一样的,code的失效期是3分钟,sessionKey的失效时间是不定的,只要用户活跃在页面上都不会失效。在获取到code的3分钟内调用 code-2-session 接口,会获取到sessionKey,如果3分钟后根据code获取sessionKey将会获取失败,因此解密也会失败。

因为无法判断用户什么时候开始获取用户信息,所以用户一进入页面,前端就会调用 ttlogin 接口进行登录,然后放到localstorage缓存中,在用户点击按钮时,d出授权框用户确认后获取到用户信息的加密数据,然后前端将缓存的code和加密数据一并传给后端。后端用code先去调用 code-2-session 接口获取到sessionKey,然后以sessionKey为密钥进行AES解密,获取到手机号返回给前台。整个流程看起来没什么问题,但是一旦用户在页面停留时间超过3分钟,然后再去获取用户信息会失败,主要是因为code已经失效,获取sessionKey会失败。

目前的问题就是过了code的有效期后,根据code获取sessionKey失败。那么在前端login获取到code后,先缓存到本地,然后立即调用后台接口去获取sessionKey然后缓存到redis里面,key为code,value为sessionKey。失效时间根据自己的业务设置(小程序页面用户不会停留太久,因此缓存失效时间设置为30分钟),用户退出小程序后,会重新login,然后也会存一份新的code和sessionKey的对应值。

用户在授权到用户信息后,前端直接将缓存的code和加密后的用户信息上传到服务到进行解密。服务端根据code从缓存中先获取到sessionKey,然后再用sessionKey进行解密,解析出手机号进行返回。

以上解决办法每次基本都可以获取手机号成功,但是也会存在一些问题

UserInfoController主要提供两个接口,一个是解密手机号和code2seesion *** 作

TiktokEncryptedParam 主要是前端传过来的code和加密后的数据

TiktokUserInfoSPI 主要是对接口的封装

TiktokUserInfoSPIAdapter 实现接口

使用AES对称加密

以上就是关于怎么用session保持登入状态全部的内容,包括:怎么用session保持登入状态、微信小程序怎么获取session、用java,想写一个web聊天的应用,使用session来储存当前用户吗还是用线程聊天记录放在哪里等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9783825.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存