日期:2014-05-17  浏览次数:20468 次

cookie的跨域登陆问题
在网站登陆网站是m.XX.com下设置了cookie的作用域是.XX.com 和.XX.net 登陆时只有.com下的获取到cookie的状态.net下的就获取不到呢,难道要在m.XX.net下登陆这个才行?
设置了路径是/ 
我是2个coookie类一个类是com的一个是net的,一次登陆调用这两个类。
.net下就是获取不到.com域名下创建的域为.net的cookie额。。求解答

------解决方案--------------------
一级域名也不一样了。。 应该不行了吧。。 这我没试过。。
你的系统可以用单点登录啊。
------解决方案--------------------
一级域名不一致肯定不行。
------解决方案--------------------
cookie是不能跨域的
------解决方案--------------------
前几天刚回答过一次,如下
=====================================

首先你这个单点登录涉及到一个浏览器跨域的问题,也就是说,你在A认证通过后,A的session中或者是application中记录了当前用户的登录情况。比如说你使用全局的datatable来存放相关登录情况,可以使用sessionid和userid来检索。那么当你在当前窗口点击B系统的链接时,是你是无法得到A系统的相关情况的,特别是A系统的sessionid。
你可以采用以下方法,来告知系统B你在A系统中登录的情况。

1、用B系统链接上加上A系统的sessionid的方式来做。
进入B系统后使用这一个sessoinid向A系统中的webservice进行验证。

2、用页面提交。A系统登录后使用一隐藏帧、form或ajax将当前A系统sessionid提交到B系统。此时当前窗口获取到了B系统的sessionid.并在B系统session中记录了a系统中的sessionid。在访问B系统页面时,可根据session中的A系统sessionid进行对A中一个确权webservic进行访问,获取是否登录和权限的相关信息。

3、使用jsonp,在A系统中,提供一个axhx页。
如下输出
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
context.Response.Write(" getUserCallBack({\"Name\": \"Foo\", \"Id\" : 1234, \"Role\": 1|7|9|8|5, \"UCLC_SessionID\" : " + context.Session.SessionID.ToString() + " });");
}
在b系统中可以使用
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
function getUserCallBack(data)
{
$("#other_sessionid").val ( data.UCLC_SessionID);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
localhost web server sessionid :<input type="text" runat="server" id="localhost_sessionid" value="" name="localhost_sessionid"/><br />
other domain web server sessionid:<input type="text" id="other_sessionid" value="nothing" name="other_sessionid" /><br />
<script src="http://A系统/a.ashx" type="text/javascript" ></script>
</div>
</form>
</body>
</html>

则在B系统的页面上可以获取,你当初在A系统中使用的session中的数据。再使用这些数据在服务器端进行webservice确权即可。


------解决方案--------------------
net站点 写个api com站点把cookie值加密发给他 如果 cookie值不是很长的话 用rsa 很长的话用对称des

net收到请求 把cookie解密 写入
------解决方案--------------------
探讨
引用:

前几天刚回答过一次,如下
=====================================

首先你这个单点登录涉及到一个浏览器跨域的问题,也就是说,你在A认证通过后,A的session中或者是application中记录了当前用户的登录情况。比如说你使用全局的datatable来存放相关登录情况,可以使用sessionid和userid来检索。那么当……

------解决方案--------------------
1、用Post 或Get将当前登录用户的身份 加密 发送的 B站点,注意加密的时候将当前时间加密进去,用于做超时限制。
2、B站点进行解密,判断身份标示,判断时间。
------解决方案--------------------
没得跨 有还得了,我直接写个cookie登录你的网站