我localhost.com请求api/login(登陆成功保存USERID到session里)
然后我再请求api/getUser 在getUser里面我获取之前登陆保存的seesion等于NULL为什么(我已经登陆过了)
16 个解决方案
#1
没人吗 是请求的WEB API中SESSION 自己来顶个层
#2
session里可以保存user对象,不限于某个值,对象在会话过程中常被用到,你不可能每次都去数据库拿吧
#3
session只能在一次会话中使用,你网站关闭,session就会被注销,建议你使用cookie
#4
这不是跨域,session是对话状态,你如果只是访问一次,然后没有任何页面持久化那个域名的页面,那么对话就失效了,再打开就是新的页面,当然这种也跟你的浏览器有关
#5
另外,这本身也具有跨域问题,你可以查下p3p协议
#6
大神 新手不知道怎么处理这种问题 能给个解决方案吗? 应为是WEBAPI保存的SESSION 怎么样保存持久化了? 保持SESSION会话不会消失?
#7
每次访问WEBAPI提供的方法是不是就是一次新的会话 所以SESSION消失了
#8
Web Api 本来就是无状态的, 都是基于token来请求的
#9
首先搞懂SESSION是什么。。就是客户端COOKIES加服务器端的缓存。。
如果你访问一个接口(A),A中将userid保存到SESSION中(Session[userid]="AAA")。。这时服务器做了什么?
首先Session的数据结构大概是这样的
Dictionary<string,Dictionary<string,object>> session_struct;
1.生成一个唯一标识如:qweasdzxc1234
2.往session_struct中插入key为qweasdzxc1234,value为新是实例化的一个Dictionary<string,object> 我们暂且称为value_struct
3.将value_struct中插入key=userid value="AAA",操作完成
4.将生成的唯一标识(qweasdzxc1234),添加Cookies到响应头中(我看过了,Cookie的名字都叫ASP.NET_SessionId)
5.客户端收到响应后写入Cookie
所以下次请求的时候,你通过Session去获取时,其实它会去请求头的cookies中寻找这个标识,找到对应的value_struct,然后找到你要的信息。
很明显,你如果用程序去调这个WebApi(HttpWebRequest),很明显没带Cookie。。当然为空。。
如果你访问一个接口(A),A中将userid保存到SESSION中(Session[userid]="AAA")。。这时服务器做了什么?
首先Session的数据结构大概是这样的
Dictionary<string,Dictionary<string,object>> session_struct;
1.生成一个唯一标识如:qweasdzxc1234
2.往session_struct中插入key为qweasdzxc1234,value为新是实例化的一个Dictionary<string,object> 我们暂且称为value_struct
3.将value_struct中插入key=userid value="AAA",操作完成
4.将生成的唯一标识(qweasdzxc1234),添加Cookies到响应头中(我看过了,Cookie的名字都叫ASP.NET_SessionId)
5.客户端收到响应后写入Cookie
所以下次请求的时候,你通过Session去获取时,其实它会去请求头的cookies中寻找这个标识,找到对应的value_struct,然后找到你要的信息。
很明显,你如果用程序去调这个WebApi(HttpWebRequest),很明显没带Cookie。。当然为空。。
#10
这个问题的根本就是,你的WebApi设计得有问题。。
现在都是通过数字签名的方式去做的了。
如果你确定要用Session。。那么我可以肯定的是。调用api.com中的login接口在响应头的Cookie中一定有一个交ASP.NET_SessionId的东西。。你去调getUser接口时把它带上就可以了
现在都是通过数字签名的方式去做的了。
如果你确定要用Session。。那么我可以肯定的是。调用api.com中的login接口在响应头的Cookie中一定有一个交ASP.NET_SessionId的东西。。你去调getUser接口时把它带上就可以了
#11
还是不太明白如果SESSION在login中有保存,并且他叫userId 和一个qweasdzxc1234为什么不能在getUser请求的时候在服务端直接拿到叫userId的SESSION 而要通过login返回的qweasdzxc1234ID在前段拿到再通过请求发送到服务端再通过传过去的去寻找呢?
#12
。 这不科学
#13
如果直接通过userId拿。你怎么区别不同的人呢?不区别人,怎么叫做会话呢?
#14
qweasdzxc1234 相当于一个会话标识,只有拿着这个表示过来,我服务器才知道你是谁。
不然我有N个用户,都存了session都存了userid。。我请求服务器的时候,我如何分辨你到底是谁?你存的userid到底是哪一个
不然我有N个用户,都存了session都存了userid。。我请求服务器的时候,我如何分辨你到底是谁?你存的userid到底是哪一个
#15
1.)session相当于‘银行'
2.)ASP.NET_SessionId(会话ID)相当于一张‘银行卡’,这个是唯一的。
3.)session["活期"]=123。相当你拿着银行卡(ASP.NET_SessionId),去银行告诉柜台我要给‘活期’存入123块钱。。
4.)你这种情况属于没有ASP.NET_SessionId(会话ID),然后去服务器取数据。就相当于你没有银行卡,然后跑去银行说我要在‘活期’取钱123块。。人家鬼知道你银行卡是多少。又不是你一个人有‘活期’账户。
5.)ASP.NET_SessionId(会话ID)是保存在客户端Cookie的,所以平时写代码在网站运行时正常。那是因为你服务器在给session赋值时做了这一切,并且把会话ID放在响应头的cookie里头,游览器接收到响应后自然就写入到游览器Cookie里头了。下次请求时自然就知道你是谁了。
你webapi去调登录,你不存这个会话ID。然后去getUser。鬼知道你是谁?
总结就是基础不到位。
2.)ASP.NET_SessionId(会话ID)相当于一张‘银行卡’,这个是唯一的。
3.)session["活期"]=123。相当你拿着银行卡(ASP.NET_SessionId),去银行告诉柜台我要给‘活期’存入123块钱。。
4.)你这种情况属于没有ASP.NET_SessionId(会话ID),然后去服务器取数据。就相当于你没有银行卡,然后跑去银行说我要在‘活期’取钱123块。。人家鬼知道你银行卡是多少。又不是你一个人有‘活期’账户。
5.)ASP.NET_SessionId(会话ID)是保存在客户端Cookie的,所以平时写代码在网站运行时正常。那是因为你服务器在给session赋值时做了这一切,并且把会话ID放在响应头的cookie里头,游览器接收到响应后自然就写入到游览器Cookie里头了。下次请求时自然就知道你是谁了。
你webapi去调登录,你不存这个会话ID。然后去getUser。鬼知道你是谁?
总结就是基础不到位。
#16
1.)session相当于‘银行'
2.)ASP.NET_SessionId(会话ID)相当于一张‘银行卡’,这个是唯一的。
3.)session["活期"]=123。相当你拿着银行卡(ASP.NET_SessionId),去银行告诉柜台我要给‘活期’存入123块钱。。
4.)你这种情况属于没有ASP.NET_SessionId(会话ID),然后去服务器取数据。就相当于你没有银行卡,然后跑去银行说我要在‘活期’取钱123块。。人家鬼知道你银行卡是多少。又不是你一个人有‘活期’账户。
5.)ASP.NET_SessionId(会话ID)是保存在客户端Cookie的,所以平时写代码在网站运行时正常。那是因为你服务器在给session赋值时做了这一切,并且把会话ID放在响应头的cookie里头,游览器接收到响应后自然就写入到游览器Cookie里头了。下次请求时自然就知道你是谁了。
你webapi去调登录,你不存这个会话ID。然后去getUser。鬼知道你是谁?
总结就是基础不到位。
好的 谢谢 已经想办法解决的个问题了 谢谢大佬给我涨知识
#1
没人吗 是请求的WEB API中SESSION 自己来顶个层
#2
session里可以保存user对象,不限于某个值,对象在会话过程中常被用到,你不可能每次都去数据库拿吧
#3
session只能在一次会话中使用,你网站关闭,session就会被注销,建议你使用cookie
#4
这不是跨域,session是对话状态,你如果只是访问一次,然后没有任何页面持久化那个域名的页面,那么对话就失效了,再打开就是新的页面,当然这种也跟你的浏览器有关
#5
另外,这本身也具有跨域问题,你可以查下p3p协议
#6
另外,这本身也具有跨域问题,你可以查下p3p协议
大神 新手不知道怎么处理这种问题 能给个解决方案吗? 应为是WEBAPI保存的SESSION 怎么样保存持久化了? 保持SESSION会话不会消失?
#7
这不是跨域,session是对话状态,你如果只是访问一次,然后没有任何页面持久化那个域名的页面,那么对话就失效了,再打开就是新的页面,当然这种也跟你的浏览器有关
每次访问WEBAPI提供的方法是不是就是一次新的会话 所以SESSION消失了
#8
Web Api 本来就是无状态的, 都是基于token来请求的
#9
首先搞懂SESSION是什么。。就是客户端COOKIES加服务器端的缓存。。
如果你访问一个接口(A),A中将userid保存到SESSION中(Session[userid]="AAA")。。这时服务器做了什么?
首先Session的数据结构大概是这样的
Dictionary<string,Dictionary<string,object>> session_struct;
1.生成一个唯一标识如:qweasdzxc1234
2.往session_struct中插入key为qweasdzxc1234,value为新是实例化的一个Dictionary<string,object> 我们暂且称为value_struct
3.将value_struct中插入key=userid value="AAA",操作完成
4.将生成的唯一标识(qweasdzxc1234),添加Cookies到响应头中(我看过了,Cookie的名字都叫ASP.NET_SessionId)
5.客户端收到响应后写入Cookie
所以下次请求的时候,你通过Session去获取时,其实它会去请求头的cookies中寻找这个标识,找到对应的value_struct,然后找到你要的信息。
很明显,你如果用程序去调这个WebApi(HttpWebRequest),很明显没带Cookie。。当然为空。。
如果你访问一个接口(A),A中将userid保存到SESSION中(Session[userid]="AAA")。。这时服务器做了什么?
首先Session的数据结构大概是这样的
Dictionary<string,Dictionary<string,object>> session_struct;
1.生成一个唯一标识如:qweasdzxc1234
2.往session_struct中插入key为qweasdzxc1234,value为新是实例化的一个Dictionary<string,object> 我们暂且称为value_struct
3.将value_struct中插入key=userid value="AAA",操作完成
4.将生成的唯一标识(qweasdzxc1234),添加Cookies到响应头中(我看过了,Cookie的名字都叫ASP.NET_SessionId)
5.客户端收到响应后写入Cookie
所以下次请求的时候,你通过Session去获取时,其实它会去请求头的cookies中寻找这个标识,找到对应的value_struct,然后找到你要的信息。
很明显,你如果用程序去调这个WebApi(HttpWebRequest),很明显没带Cookie。。当然为空。。
#10
这个问题的根本就是,你的WebApi设计得有问题。。
现在都是通过数字签名的方式去做的了。
如果你确定要用Session。。那么我可以肯定的是。调用api.com中的login接口在响应头的Cookie中一定有一个交ASP.NET_SessionId的东西。。你去调getUser接口时把它带上就可以了
现在都是通过数字签名的方式去做的了。
如果你确定要用Session。。那么我可以肯定的是。调用api.com中的login接口在响应头的Cookie中一定有一个交ASP.NET_SessionId的东西。。你去调getUser接口时把它带上就可以了
#11
这个问题的根本就是,你的WebApi设计得有问题。。
现在都是通过数字签名的方式去做的了。
如果你确定要用Session。。那么我可以肯定的是。调用api.com中的login接口在响应头的Cookie中一定有一个交ASP.NET_SessionId的东西。。你去调getUser接口时把它带上就可以了
还是不太明白如果SESSION在login中有保存,并且他叫userId 和一个qweasdzxc1234为什么不能在getUser请求的时候在服务端直接拿到叫userId的SESSION 而要通过login返回的qweasdzxc1234ID在前段拿到再通过请求发送到服务端再通过传过去的去寻找呢?
#12
。 这不科学
#13
这个问题的根本就是,你的WebApi设计得有问题。。
现在都是通过数字签名的方式去做的了。
如果你确定要用Session。。那么我可以肯定的是。调用api.com中的login接口在响应头的Cookie中一定有一个交ASP.NET_SessionId的东西。。你去调getUser接口时把它带上就可以了
还是不太明白如果SESSION在login中有保存,并且他叫userId 和一个qweasdzxc1234为什么不能在getUser请求的时候在服务端直接拿到叫userId的SESSION 而要通过login返回的qweasdzxc1234ID在前段拿到再通过请求发送到服务端再通过传过去的去寻找呢?
如果直接通过userId拿。你怎么区别不同的人呢?不区别人,怎么叫做会话呢?
#14
qweasdzxc1234 相当于一个会话标识,只有拿着这个表示过来,我服务器才知道你是谁。
不然我有N个用户,都存了session都存了userid。。我请求服务器的时候,我如何分辨你到底是谁?你存的userid到底是哪一个
不然我有N个用户,都存了session都存了userid。。我请求服务器的时候,我如何分辨你到底是谁?你存的userid到底是哪一个
#15
1.)session相当于‘银行'
2.)ASP.NET_SessionId(会话ID)相当于一张‘银行卡’,这个是唯一的。
3.)session["活期"]=123。相当你拿着银行卡(ASP.NET_SessionId),去银行告诉柜台我要给‘活期’存入123块钱。。
4.)你这种情况属于没有ASP.NET_SessionId(会话ID),然后去服务器取数据。就相当于你没有银行卡,然后跑去银行说我要在‘活期’取钱123块。。人家鬼知道你银行卡是多少。又不是你一个人有‘活期’账户。
5.)ASP.NET_SessionId(会话ID)是保存在客户端Cookie的,所以平时写代码在网站运行时正常。那是因为你服务器在给session赋值时做了这一切,并且把会话ID放在响应头的cookie里头,游览器接收到响应后自然就写入到游览器Cookie里头了。下次请求时自然就知道你是谁了。
你webapi去调登录,你不存这个会话ID。然后去getUser。鬼知道你是谁?
总结就是基础不到位。
2.)ASP.NET_SessionId(会话ID)相当于一张‘银行卡’,这个是唯一的。
3.)session["活期"]=123。相当你拿着银行卡(ASP.NET_SessionId),去银行告诉柜台我要给‘活期’存入123块钱。。
4.)你这种情况属于没有ASP.NET_SessionId(会话ID),然后去服务器取数据。就相当于你没有银行卡,然后跑去银行说我要在‘活期’取钱123块。。人家鬼知道你银行卡是多少。又不是你一个人有‘活期’账户。
5.)ASP.NET_SessionId(会话ID)是保存在客户端Cookie的,所以平时写代码在网站运行时正常。那是因为你服务器在给session赋值时做了这一切,并且把会话ID放在响应头的cookie里头,游览器接收到响应后自然就写入到游览器Cookie里头了。下次请求时自然就知道你是谁了。
你webapi去调登录,你不存这个会话ID。然后去getUser。鬼知道你是谁?
总结就是基础不到位。
#16
1.)session相当于‘银行'
2.)ASP.NET_SessionId(会话ID)相当于一张‘银行卡’,这个是唯一的。
3.)session["活期"]=123。相当你拿着银行卡(ASP.NET_SessionId),去银行告诉柜台我要给‘活期’存入123块钱。。
4.)你这种情况属于没有ASP.NET_SessionId(会话ID),然后去服务器取数据。就相当于你没有银行卡,然后跑去银行说我要在‘活期’取钱123块。。人家鬼知道你银行卡是多少。又不是你一个人有‘活期’账户。
5.)ASP.NET_SessionId(会话ID)是保存在客户端Cookie的,所以平时写代码在网站运行时正常。那是因为你服务器在给session赋值时做了这一切,并且把会话ID放在响应头的cookie里头,游览器接收到响应后自然就写入到游览器Cookie里头了。下次请求时自然就知道你是谁了。
你webapi去调登录,你不存这个会话ID。然后去getUser。鬼知道你是谁?
总结就是基础不到位。
好的 谢谢 已经想办法解决的个问题了 谢谢大佬给我涨知识