`
vtrtbb
  • 浏览: 359975 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

同一IP下多端口网站共享cookie的问题

 
阅读更多

以前开开发过程中使用cookie比较随便,后来发现同一个cookie在不同端口的站点下面其实是共有的,给开发造成一定的麻烦。现在我的cookie访问类已经修改过来了。所以说,有时候网上的东西还是不能拿过来就用啊,具体问题还得具体分析

 

 

 

using System;
using System.Web;
namespace Common.Web
{
    /// <summary>
    /// 操作Cookie
    /// </summary>
    public class Cookie
    {

        /// <summary>
        /// 创建Cookies
        /// </summary>
        /// <param name="strName">Cookie 主键</param>
        /// <param name="strValue">Cookie 键值</param>
        /// <param name="strDay">Cookie 天数(单位:30分钟)</param>
        /// <code>Cookie ck = new Cookie();</code>
        /// <code>ck.setCookie("主键","键值","天数");</code>
        public bool SetCookie(string strName, string strValue, int strDay)
        {
            try
            {
                DelCookie(strName);
                string port = HttpContext.Current.Request.Url.Port.ToString();
                strName = strName + "_" + port;
                HttpCookie Cookie = new HttpCookie(strName);
                Cookie.Expires = DateTime.Now.AddDays(strDay / 48.0);
                //  Cookie.Expires = DateTime.Now.AddDays(strDay / 1.0);
                Cookie.Value = strValue;
                System.Web.HttpContext.Current.Response.Cookies.Add(Cookie);
                return true;
            }
            catch
            {
                //     Common.LogManager.GetInstance().Log("设置COOKIE失败");
                return false;
            }
        }

        /// <summary>
        /// 读取Cookies
        /// </summary>
        /// <param name="strName">Cookie 主键</param>
        /// <code>Cookie ck = new Cookie();</code>
        /// <code>ck.getCookie("主键");</code>
        public string GetCookie(string strName)
        {
            string port = HttpContext.Current.Request.Url.Port.ToString();
            strName = strName + "_" + port;
            HttpCookie Cookie = System.Web.HttpContext.Current.Request.Cookies[strName];
            if (Cookie != null)
            {
                if (Cookie.Value != null)
                {
                    return Cookie.Value.ToString();
                }
                else
                {
                    return null;
                }
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// 删除Cookies
        /// </summary>
        /// <param name="strName">Cookie 主键</param>
        /// <code>Cookie ck = new Cookie();</code>
        /// <code>ck.delCookie("主键");</code>
        public bool DelCookie(string strName)
        {
            try
            {
                string port = HttpContext.Current.Request.Url.Port.ToString();
                strName = strName + "_" + port;
                HttpCookie Cookie = new HttpCookie(strName);
                Cookie.Expires = DateTime.Now.AddDays(-100);
                Cookie.Value = null;
                System.Web.HttpContext.Current.Response.Cookies.Add(Cookie);
                return true;
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// 得到网站的Cookie
        /// </summary>
        /// <param name="url">网站域名 如http://www.xxx.com</param>
        /// <param name="cookie"></param>
        /// <returns></returns>
        public System.Net.CookieCollection GetCookieCollection(string url, System.Net.CookieContainer cookie)
        {
            Uri uri = new Uri(url);
            System.Net.CookieCollection ccll = cookie.GetCookies(uri);
            return ccll;
        }

    }
}

 

function getcookie(varName) {
    var port = location.port; //浏览器端口
    if (port == "") {
        port = "80";
    }
    var cookieStr = document.cookie;
    if (cookieStr == "") {
        return "0";
    }
    var cookieValue = cookieStr.split(";");
    //alert(cookieValue);
    var startPos = -1;
    var endPos = -1;
    for (var i = 0; i < cookieValue.length; i++) {
        //startPos = cookieValue[i].indexOf(varName);
        var key = cookieValue[i].substring(0, cookieValue[i].indexOf("="))
        //alert(("查询到的KEY " + key).toString().length);
        //alert(("希望查询到的KEY " + varName + "_" + port).toString().length);
        if (key.replace(" ", "") == (varName + "_" + port).replace(" ", "")) {
            startPos = cookieValue[i].indexOf("=")+1
            var css = cookieValue[i].substring(startPos);
            //alert(varName + ":" + port + "=" + css);
                //alert("查询 "+varName+" 得到 "+css);
            return css;
        }
    }

    return "0";
}
function savecookie(key, val) {
    var port = location.port;
    if (port == "") {
        port = "80";
    }
    var the_date = new Date("December 31, 2020");
    var expiresDate = the_date.toGMTString();
    document.cookie = key + "_" + port + "=" + escape(val) + "; expires=" + expiresDate;
}
function delCookie(name) {
    var port = location.port;
    if (port == "") {
        port = "80";
    }
    var exp = new Date();
    exp.setTime(exp.getTime() - 1000);
    var cval = getcookie(name);
    document.cookie = name + "_" + port + "=" + escape(cval) + ";expires=" + exp.toGMTString();
}
function getPort(str) {
    s = str.split('_');
    return s[1];
}

 

来自http://www.cnblogs.com/zhuzhenyu/archive/2012/07/27/2611958.html

 

分享到:
评论

相关推荐

    一个服务器搭多个tomcat导致session丢失,或者同一个IP不同端口,多个应用的session会冲突解决方法

    经过资料查找,发现问题是因为:IP相同认为是同一个域,接收了B的set-cookie指令,把对应的cookie内容覆盖了,其中包括jsessionid,造成A的session丢失。 如果IP不同,则不会发生这个问题。IP相同的两个session对应的...

    解决前后端分离 vue+springboot 跨域 session+cookie失效问题

    在前后端分离的架构中,Vue.js作为前端框架与Spring Boot作为后端服务进行交互时,常常会遇到跨域和Session、Cookie失效的问题。本文将详细介绍如何解决这些问题。 首先,跨域是由于浏览器的安全策略限制,同一源...

    6.4: Session与Cookie 、 部署memcached 、 Session共享 、 .docx

    - 要注意的是,当使用Session时,Nginx需要配置负载均衡策略以考虑Session共享,比如使用ip_hash策略,确保同一用户的请求始终被转发到同一台服务器。 6. **部署LNMP环境**: - LNMP代表Linux、Nginx、MariaDB...

    session共享 tomcat+nginx+memcache

    5. **Nginx配置**:在Nginx的配置文件中,你可以使用`ip_hash`或`sticky`模块来基于用户的IP地址或特定cookie保持会话粘滞,确保同一用户的请求始终路由到同一台Tomcat服务器,以减少Session同步的需求。 6. **测试...

    Nginx+tomcat 实现负载均衡session共享demo

    2. 配置`Nginx`:在`nginx.conf`配置文件中,我们需要定义一个upstream块,列出所有`Tomcat`服务器的IP地址和端口号,例如: ```nginx upstream tomcat_cluster { server tomcat1.example.com:8080; server ...

    Windows+Nginx+Tomcat做负载均衡同时实现session共享Demo

    一种常见的方式是使用cookie或者URL重写来携带session ID,但是这种方法存在安全性问题。更安全的解决方案是使用Nginx的proxy_pass指令将session信息转发到后端服务器,并配置Tomcat使用相同的session存储机制,如...

    tomcat8+nginx1.4+jdk8配置session共享

    在构建分布式系统时,Session共享是一个关键问题,特别是在使用多个应用服务器(如Tomcat)和负载均衡器(如Nginx)的环境中。本配置主要针对"tomcat8+nginx1.14+jdk8"的环境,目的是实现Session数据在多台Tomcat...

    nginx+tomcat+memcached实现session共享

    在现代Web应用开发中,确保用户会话(session)在多台服务器之间共享是一项关键任务。这有助于提高系统的可扩展性和容错性,因为用户在切换服务器时无需重新登录或丢失状态信息。本主题将详细讲解如何利用Nginx、...

    tomcat+redis+nginx session共享.docx

    3. **基于Cookie的Session共享**:利用Cookie保存Session标识符,但在分布式环境下可能遇到Cookie被浏览器阻止的情况。 4. **基于缓存的Session共享**:本方案选用Redis作为中间件,实现Session数据的快速读写和共享...

    nginx tomcat memcached session共享

    在分布式环境中,将session数据存储在Memcached中可以确保所有服务器都能访问同一份session数据,实现session共享。 为了实现Nginx、Tomcat和Memcached之间的session共享,我们需要进行以下步骤: 1. **配置...

    Nginx 集群 tomcat session 共享配置有源码

    然而,当多个Tomcat实例构成集群时,会面临一个问题:用户session的共享。Session是Web应用程序用来跟踪用户状态的重要机制,如果不能在集群间共享,用户在切换服务器时可能会失去登录状态,导致用户体验下降。为...

    sso单点登录(整理的学习文档)

    - **跨域的概念**:客户端请求的不同服务器如果不在同一IP、端口、域名或主机名下,则认为是跨域请求。 - **域的定义**:在应用模型中,一个完整且具有独立访问路径的功能集合被称为一个“域”。 ##### 2. Cookie...

    期末考试试题-2014计算机网络B1

    当用户再次访问同一网站时,浏览器会自动将这些Cookie发送回服务器,从而帮助服务器识别用户。 - Session:服务器在内存中创建一个会话对象,分配给每个用户一个唯一的会话ID,并将其通过Cookie返回给客户端。后续...

    WebLogic和F5相结合的负载均衡配置方案.doc

    1. 在BIG-IP上创建虚拟服务器,这代表对外公开的IP地址和端口,接收来自客户端的请求。 2. 配置后端服务器池,包含WebLogic集群的所有实例。 3. 设置负载均衡算法,如轮询、最少连接或基于权重的分配。 4. 开启会话...

    WebApi 跨域问题解决方案:CORS

    WebApi 跨域问题主要源于浏览器的同源策略,这是一种安全机制,限制JavaScript或Cookie只能访问同一源(协议+域名+端口)下的内容。在实际开发中,当WebApi作为一个独立的服务,例如数据服务层,而MVC项目作为前端...

    Nginx+Tomcat+Memcached实现负载均衡过程中session所需架包

    在构建高性能、高可用性的Web应用系统时,通常会采用Nginx作为反向代理和负载均衡器,Tomcat作为Java应用服务器,而Memcached作为分布式缓存来处理session共享问题。本文将详细讲解如何利用Nginx、Tomcat和Memcached...

    分布式session 解决方案

    3. **一致性哈希**:通过一致性哈希算法,确保相同IP的请求始终被路由到同一台服务器,从而保证Session的连续性。尽管在服务器故障或水平扩展时可能出现Session丢失或路由问题,但一致性哈希在大多数情况下是可接受...

    haproxy当前最新稳定版

    4. **SSL卸载**:haproxy可以处理SSL加密的连接,减轻服务器负担,并且支持SNI(Server Name Indication)扩展,为多域名共享同一IP地址提供支持。 5. **统计与监控**:haproxy提供丰富的统计信息,包括连接数、响应...

Global site tag (gtag.js) - Google Analytics