当使用 session 的时候,关于在微信中,session 获取不到的问题

1.业务场景
微信登入授权
2.问题描述
用的是 easywechat 这个第三方依赖包,取到用户的信息存储到session中(这样在下次登入的时候就不需要再次去微信那边进行授权操作),并设置了session的过期时间为一个月,但是在实际的应用中发现过了一段时间session就拿不到了(这会导致我再次请求了微信接口,进而进入页面很慢),一开始以为是session过期了,经过调试发现问题和微信的cookie被清除掉了是同一种情况。
所以我的问题是,当微信端cookie被清除掉了,我应该采取怎样的策略来解决这个问题。(延长cookie时长,怎么延长,是前端还是后端的操作,这个也很想请教一下)

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3

我觉得首先你要搞明白session和cookie的关系。其次我记得好像是微信后台被关闭就会自动清理cookie。至于你后面的问题解决方法就是再次授权,如果授权过了可以用snsapi_base这种方式获取到openid再用接口去拉具体信息。snsapi_base不会弹出授权确认,前提是之前授权过了。

4年前 评论
wanglaodid (楼主) 4年前

周末测试了一下,首先可以确认三件事。
1.laravel 的 session 必须得有cookie在能正确取到。
2.laravel 的 session 时长的设置是有效的,设置在redis就是在redis 设置在file就是在file
3.非微信浏览器的session 关闭后再次打开必然取不到,不关闭的情况下视你的session时长为准;微信端在后台的情况下默认是2个小时?(不确定)会自动清除掉cookie。

我自身的问题是因为在授权时,写了个updateOrInsert,插入和更新了用户的数据,没有使用到索引(这个sql语句等了10秒钟,这个语法目前还没明白透彻,就不贴代码了) pray: :pray: :pray: :pray: :pray:

4年前 评论
    /**
     * Insert or update a record matching the attributes, and fill it with values.
     *
     * @param  array  $attributes
     * @param  array  $values
     * @return bool
     */
    public function updateOrInsert(array $attributes, array $values = [])
{
    if (! $this->where($attributes)->exists()) {
        return $this->insert(array_merge($attributes, $values));
    }

    return (bool) $this->take(1)->update($values);
}
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!