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

Microsoft-笨笨 2017-03-08 12:19:36
各位大虾好,小弟请教一个问题,认证的微信公众号,我通过接口获取到了微信用户的OpenId,并将该OpenID存于Session中,以此为依据对数据库中的相关数据操作,比如查询和OpenID相关的数据或修改相关数据,后来发现Session失效,就会出现各种问题(注:表现页用的是html,某些数据是通过ashx完成的),求解决方案,求指导
...全文
3623 12 打赏 收藏 转发到动态 举报
写回复
用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的值。
网页中实现微信扫一扫,不用备案就能在自己网页中实现扫描二维码 有时我们只需要在自己网页中加入个扫一扫并且获取结果的小小功能就行,然而微信开发门槛太高,需要公众号需要交300块认证,然后域名还要备案,公众号后台需要各种配置,需要调用微信开发各个接口,最后可能并不会看到效果。 现在我要告诉你,你有救了!你只要简单使用上面提供的接口就行,什么论七八糟的统统都不用管了,只需要关注你的程序怎么处理这些数据。 不过任何事情都是相对的,本帖提供的方法缺点也是有的,就是多一次跳转,而大家都知道页面跳转那么当前输入框等控件内容都会丢失。不用担心,问题总是有方案解决的。 如果你只需要扫描下获取结果再处理,那么不用管这多跳转一次的问题。 如果你是在一个表单中某项需要扫描,那 么可以把扫描的那项提到最前面来,强制要用户必须先扫描才能填写表单其他项,这样问题不 就迎刃而解了? 如果要追完美扫描不跳转,那么只能一步步按照微信网页开发的要来了。 大家都知道微信扫一扫,而且很常用,基本都用来扫码关注微信号,扫码付款,再之外的如果要扫的二维码是链接就直接打开访问,非链接的直接显示文字。 然而有时我们需要在自己的网页上调用扫一扫,然后按照自己的需要对获得结果进行处理该怎么办呢?有些同学觉得很奇怪,怎么会有这样的需。其实这样的使用场景很多的,例如: 扫快递单上的条形码查询它的进度 进度系统中可以根据生产单上条形码查询生产进度 发货系统出入库扫描 扫描网址只需截取其中的一个参数结果而不是直接打开它 。。。 看下面的一个应用效果。 https://img2.mukewang.com/5b42068700012bbf02800560.jpg 是不是很方便呢?微信里打开http://www.jiujiujin.net/wuliu.htm 也可以测试效果。 如果按照通常的步骤在自己网页中调用微信的扫一扫可不是那么简单的。首先得有微信公众号,公众号还得提交认证。我们都知道不光是注册个微信公众服务号就行,而且还得提交认证,每年交300块大洋,前提还必须是企业身份才能注册和认证。 接下来才是编码,这才是考验你耐心的时刻,各种不行,各种莫名其妙的错误,有些新手可能在域名备案上就被卡了半天,因为想要调用微信的jssdk接口要访问的域名必须是备案的,设置到微信公众号的js安全域名区,然后还要设置服务器白名单,如果你的是虚拟主机而ip不固定的说不定哪天就扫不了了。调用几个接口,参数,token还有7200秒的失效,定时更新还是访问时检查判断再更新,是不是弄过的人都纠结过?很是麻烦,顿时头大了有么有?水不是一般的深,于是纷纷哭爹喊娘大神骂张小龙。 我发现我废话太多了,说好的5行代码呢?却写了这么多废话,哈哈哈。其实多了解了解也没坏处的,毕竟也算我的摸索过的心路历程。 上面给出的扫一扫指向的链接是:http://www.jiujiujin.net/wuliu.htm,聪明的同学已经打开并右击查看源代码了,可能已经明白是怎么回事了。 答案就是调用了一个接口,这个接口会去执行扫码,然后将扫码的结果作为一个参数返回到来路页面,这样来路页面中就可以获取并处理这个结果了。 废话不多说放代码测试。

62,041

社区成员

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

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

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

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