联系官方销售客服

1835022288

028-61286886

求助 版主:官方研发技术组
使用session方法缓存数据后读取混乱
类型:迅睿CMS 更新时间:2023-06-09 10:05:33 session

做一个简单的公众号获取用户openid创建账号的功能,其中用到cms的

\Phpcmf\Service::C()->session()->get('变量名称');
\Phpcmf\Service::L('cache')->set_data("缓存名称", "缓存变量值,支持数组", "缓存有效期,单位秒");

session和缓存功能,把access_token存到缓存里,用session来存用户信息。

测试的时候出现问题,在一台手机上登录创建账号成功后,在电脑上用网页打开页面,会读取到手机上缓存的cache和session文件。

手机访问时用“\Phpcmf\Service::C()->session()->set('userinfo',$str);”存账号数据,然后电脑端访问用“\Phpcmf\Service::C()->session()->get('userinfo');”会取到手机上账号的信息,这样子直接存取session就会读取混乱没有隔离,开发文档里只写了存取和删除,怎么解决这个问题?

https://www.xunruicms.com/doc/835.html

回帖
  • 官方研发技术-罗老师
    #1楼    官方研发技术-罗老师
    2023-06-06 15:24:10
    Chrome 0
    你这种场景不应该用session,应该用 https://www.xunruicms.com/doc/572.html,第三个
  • asd1234
    #2楼    asd1234
    2023-06-06 15:34:35
    Chrome 0
    官方研发技术-罗老师 默认24小时过期,设置时也不能选择过期时间吗,不需要这么频繁更新用户信息。而且一般都是用session来判断是否登录的吧,这种不同端读取到同一个session文件的问题就很奇怪。
  • 官方研发技术-罗老师
    #3楼    官方研发技术-罗老师
    2023-06-06 15:36:58
    Chrome 0
    那就用一的,固定缓存,session的作用域你并不了解
  • 小波工作室
    #4楼    小波工作室
    2023-06-06 15:37:56
    Chrome 0
    session表示一个会话啊,不止是手机和电脑不一样,同一个电脑不同浏览器都不会一样的
  • asd1234
    #5楼    asd1234
    2023-06-06 15:44:06
    Chrome 0
    官方研发技术-罗老师 固定缓存我也用过了,用来存access_token,但还是那个问题,在手机端打开页面,获取用户信息时调用 \Phpcmf\Service::L('cache')->set_data("Accesstoken", $access_token); 来存下数据。然后在电脑端打开页面,理论上是应该重新获取数据,但是 \Phpcmf\Service::L('cache')->get_data("Accesstoken"); 会取到手机端存的数据,导致信息混乱了。我疑惑的是这既然是框架封装好的方法,那么我直接调用,为什么没有隔离导致了读取混乱。
  • asd1234
    #6楼    asd1234
    2023-06-06 15:44:56
    Chrome 0
    小波工作室 所以我很奇怪啊,这是框架封装好的方法,按理说直接来用就可以了,但实际上就是会出现不同端读取到同一个缓存文件的问题。
  • 小波工作室
    #7楼    小波工作室
    2023-06-06 16:05:50
    Chrome 0
    并不奇怪,正常人在不同终端,不会使用session,session只会对当前才有效的,所以还是你基础薄弱了
  • asd1234
    #8楼    asd1234
    2023-06-06 16:19:44
    Chrome 0
    小波工作室 额,不使用session的话,那要用什么来做判断呢?
  • 想钱想疯了
    #9楼    想钱想疯了
    2023-06-09 10:05:33
    Firefox 114.0 0
    区分客户端区别的话,可以使用cookie