求关于保存微信公众号的用户OpenId的解决方案

Microsoft-笨笨 2017-03-08 12:19:36
各位大虾好,小弟请教一个问题,认证的微信公众号,我通过接口获取到了微信用户的OpenId,并将该OpenID存于Session中,以此为依据对数据库中的相关数据操作,比如查询和OpenID相关的数据或修改相关数据,后来发现Session失效,就会出现各种问题(注:表现页用的是html,某些数据是通过ashx完成的),求解决方案,求指导
...全文
3702 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
鱼头506 2018-01-23
  • 打赏
  • 举报
回复
cookies也可以的,不过首先要保存在数据库中,登录判断
Microsoft-笨笨 2017-03-09
  • 打赏
  • 举报
回复
谢谢各位大佬的回复,感谢帮助
  • 打赏
  • 举报
回复
在我经手的所有 asp.net 项目中,从一开始就明确:“不使用 Session集合、Application集合、静态变量”等等。
  • 打赏
  • 举报
回复
为了对付 Session集合丢失的问题(我再次强调,是“丢失”不是“过期”),aspnet使用 State Server 服务方式,或者SQL Server方式,来解决 InProc 模式下的问题。这也是可以的。但是当你部署在租来的网站空间上,它往往并不提供这个服务,所以你开发的时候如果根本不用 Session 集合(仅仅用 SessionID),其实就更好,你的网站不需要 Session。
正怒月神 版主 2017-03-08
  • 打赏
  • 举报
回复
我之前都是在用户登录时,存到session,并且数据库也存入openid和其他的相关信息。
  • 打赏
  • 举报
回复
引用 2 楼 MS_CSDN 的回复:
[quote=引用 1 楼 az6161311 的回复:] Session本身就有过期时间的。。 你可以在每一次访问你网页时,将openID重新赋值给session,这样就保证了用户在操作的过程中不会出现session过期,但是一旦用户长时间没有操作页面,或者访问你的数据接口,那么你完全可以给出提示,重新拉取一遍openID的值。
,感谢您的回答,用cookie可好?[/quote] 可以。但是其实使用 SessionID就够了! Session集合(以及你的 static变量值等等)随时都会“丢失”(注意不是什么“过期”而是“丢失”),只有 SessionID才不会丢失,因为SessionID是放到 cookie中的,所以不会丢失。那么你可以以 SessionID 为key自己在数据库中保存关键信息(并且使用Cache缓存)。 因此,当然你为了保存一个长期使用的不变的 SessionID,那么使用 OpenID 也是可以的。这样做唯一的缺点就是容易“被伪造”!! 有的人为了制作流氓软件,专门在论坛上问出这种问题:“知道微信用户昵称,如何换得用户在某个公众号的openid呢?”,凡是遇到这种问题,十有八九都是流氓软件制作。因为公众号可以自己得到访问用户的openid,并不需要第三方机制来公开openid。而拿不到openid的人就不是一个公众号的作者本人,而是流氓软件作者。 所以,你在cookie中保存一个(对某个公众号而言)永久openid,相比于保存一个临时的SessionID而言,安全性低了一些。你可以仅仅使用 SessionID 而不使用 openid,因为它们都是在cookie中的都不会丢失。使用 SessionID 就够了。
by_封爱 2017-03-08
  • 打赏
  • 举报
回复
你应该要解决的是 session为什么失效.. 而非其他问题. 我也是通过公众号菜单传过来的code来获取openid 为什么我的代码 没有出现过"session过期"的问题? 所以抛出你的代码 看问题.. 不过我猜LZ的代码一定是这样的 用户点击菜单跳转连接

xxx.aspx?code=******************* 

var openid=xxxxxxxx.xxxx(request[code],"secret","appid ");
session["openid"]=openid;
然后你在其他的页面 取seesion[openid] 然后查询or其他操作. 然后你某个地方取值发现空了 是吧.. 这地方有2个办法.. 第一开启asp.net_state服务 并且设置

<sessionState mode="StateServer" timeout="99999" stateNetworkTimeout="30" />
这样的session是不会(那么快)过期的 至少可以满足你目前的情况. 第二 实在不行 就把openid来回传吧 每个页面的url都带上?openid=xxxxxxxxxx 当然了 第一种办法我认为是可以搞定的 因为这个办法我用了7年 目前还没遇到过过期的时候....
Poopaye 2017-03-08
  • 打赏
  • 举报
回复
失效就让他再登录啊
丰云 2017-03-08
  • 打赏
  • 举报
回复
引用 2 楼 MS_CSDN 的回复:
[quote=引用 1 楼 az6161311 的回复:] Session本身就有过期时间的。。 你可以在每一次访问你网页时,将openID重新赋值给session,这样就保证了用户在操作的过程中不会出现session过期,但是一旦用户长时间没有操作页面,或者访问你的数据接口,那么你完全可以给出提示,重新拉取一遍openID的值。
,感谢您的回答,用cookie可好?[/quote] 相对你的情况,cookie比session更不靠谱,可以考虑存缓存或数据库
闭包客 2017-03-08
  • 打赏
  • 举报
回复
保存到数据库里面。
Microsoft-笨笨 2017-03-08
  • 打赏
  • 举报
回复
引用 1 楼 az6161311 的回复:
Session本身就有过期时间的。。 你可以在每一次访问你网页时,将openID重新赋值给session,这样就保证了用户在操作的过程中不会出现session过期,但是一旦用户长时间没有操作页面,或者访问你的数据接口,那么你完全可以给出提示,重新拉取一遍openID的值。
,感谢您的回答,用cookie可好?
天空丶蒋 2017-03-08
  • 打赏
  • 举报
回复
Session本身就有过期时间的。。 你可以在每一次访问你网页时,将openID重新赋值给session,这样就保证了用户在操作的过程中不会出现session过期,但是一旦用户长时间没有操作页面,或者访问你的数据接口,那么你完全可以给出提示,重新拉取一遍openID的值。

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧