首页 新闻 会员 周边 捐助

一级域名登陆后跳转到二级域名继续保持登陆状态。

0
悬赏园豆:10 [已解决问题] 解决于 2014-10-20 11:34

登陆是在用的保存的session状态的。请高手指教。谢谢。

学之乐的主页 学之乐 | 初学一级 | 园豆:33
提问于:2014-10-17 10:27
< >
分享
最佳答案
0

单点登录SSO http://www.open-open.com/lib/view/open1394852821353.html

收获园豆:10
Jaws | 菜鸟二级 |园豆:316 | 2014-10-19 23:52
其他回答(9)
0

以前做类似的需求用的是cookie

焰£天琊 | 园豆:418 (菜鸟二级) | 2014-10-17 10:35
0

将sessionid的cookie作用域改为".域名.com"原来的应该是"www.域名.com"

吴瑞祥 | 园豆:29449 (高人七级) | 2014-10-17 10:37
0

最简单的,登录成功后,给响应添加两个 cookie,一个一级域名,另一个二级域名。

Launcher | 园豆:45050 (高人七级) | 2014-10-17 11:26
0

session共享,比如独立缓存服务器,缓存session

draculav | 园豆:734 (小虾三级) | 2014-10-17 13:22
0

用js结合iframe传cookie过去 

tinyphp | 园豆:377 (菜鸟二级) | 2014-10-17 15:54
0

用session的替代方案memcache吧。就专门用台服务器作数据缓存

Cherbim | 园豆:323 (菜鸟二级) | 2014-10-18 10:02
0

好像用session不稳定,并且传到服务器上后,就没有本地的效果了,建议用cookie,但是最好别存汉语

lijunmomo | 园豆:34 (初学一级) | 2014-10-18 14:49
0
public class SessionSharedHttpModule : IHttpModule
    {
        string _rootDomain = null; 


        public void Dispose()
        {

        }

        public void Init(HttpApplication context)
        {
            _rootDomain = ".yiji.com";

            Type stateServerSessionProvider = typeof(HttpSessionState).Assembly.GetType("System.Web.SessionState.OutOfProcSessionStateStore");
            FieldInfo uriField = stateServerSessionProvider.GetField("s_uribase", BindingFlags.Static | BindingFlags.NonPublic);
            if (uriField == null)
                throw new ArgumentException("UriField was not found");

            uriField.SetValue(null, _rootDomain);
            context.EndRequest += new EventHandler(context_EndRequest);
        }

        /// <summary>
        /// 从发送给客户端的Cookie集合中找出记录会话ID的Cookie
        /// 并修改它的Domain属性值为要共享的一级域名
        /// </summary>
        void context_EndRequest(object sender, System.EventArgs e)
        {
            HttpApplication app = sender as HttpApplication;
            for (int i = app.Context.Response.Cookies.Count - 1; i >= 0; i--)
            {

                //ASP.NET_SessionId是默认的存储会话ID的key,如果修改了默认值这里要修改成一致的
                if (app.Context.Response.Cookies[i].Name.Equals("ASP.NET_SessionId"))
                {
                    app.Context.Response.Cookies[i].Domain = _rootDomain;
                    return;
                }
            }
        }
    }

配置文件中加入

<httpModules>
            <add name="MakeSessionIDOneOnly" type="MakeSessionIDOneOnly.SessionSharedHttpModule, MakeSessionIDOneOnly" />
 </httpModules>
学之乐 | 园豆:33 (初学一级) | 2014-10-20 11:32
0

mark

晓道 | 园豆:297 (菜鸟二级) | 2014-11-23 20:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册