用mvc 写的一个接口 每个接口都会验证登录信息存在session里,别人调用的时候,先去登录,在调用别的接口但是session一直为空 ,谁知道什么原因啊
你写的接口 别人用程序调用,怎么会有session呢。
接口调用和浏览器调用不一样的。因为你要维护一个token,sign等等。是不适合用session的。
因为有各个不同的平台登录,我要获取平台的一个基本信息
@墨笔淡红尘: 这个让平台提供给你登录平台的信息啊,如果是各个平台的话就更不应该用sesion了。
session是适合用在web端,如果是多平台开发的话,你应该给各个平台一个统一的一个格式,比如每个平台调用接口时给你传个token,然后你根据token判断是哪个用户。
登录的时候根据用户名和密码返回一个token给各个平台,然后每次访问带着这个token,就类似session的原理
@Emrys5: 那每次同一个平台token生成的 不都一样了吗,怎么给过期时间啊
@墨笔淡红尘: 一样怕什么,你的每个平台调用接口的时候数据要验证加密的,所以一样也无所谓了,过期时间在接口那设置就可以了,用那个滑动过期时间就好了。每次访问的时候把过期时间重置一下,等过了过期时间在访问,就返回未登录,让客户重新登录
@Emrys5:滑动过期时间 是cache ,cookie才有的吗,生成的怎么 设置啊
条件不足.
你先要确定是客户端为空还是服务端为空。
服务端是.net来管理的,那么就是你没保存。客户端如果是某些未管理的,需要客户端自己管理。
登录之后就存在session里了,然后控制器上打上了特性标签,但是获取的时候就为空
调用方 是哪种很关键
SESSION这种识别会话的机制,只适用于调用方是WEB的情况,比如浏览器来调你的接口,或者WebRequest、HttpClient之类也行。也就是说:你的接口所在的应用程序和调用方应用程序之间通讯是走http协议才行。
调用方是WebRequest这种方式调的
@墨笔淡红尘: 那就调试一个调用方,看请求发出时,有没有带上sessionid这个cookie.
@墨笔淡红尘: 百度一下 CookieContainer
服务端请求每次都是不同的会话,第一次调你登录接口进行登录,尽管你存进了session,但下一个请求过来又是一个新的会话,等于没登录,这种情况请参考微信等开放接口的授权模式
别人的网站或者前端js直接对接您的api接口,是不会在第二次调用接口时候获取到第一次存储的session的,这种情况应该是第一次调用你接口的时候给前端返回一个token,然后每次调用您接口都让对方把token传递给您,用token来从当会话匹配的条件,然后您后台对token验证,过期,是否符合规范等。