以前开开发过程中使用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
相关推荐
经过资料查找,发现问题是因为:IP相同认为是同一个域,接收了B的set-cookie指令,把对应的cookie内容覆盖了,其中包括jsessionid,造成A的session丢失。 如果IP不同,则不会发生这个问题。IP相同的两个session对应的...
在前后端分离的架构中,Vue.js作为前端框架与Spring Boot作为后端服务进行交互时,常常会遇到跨域和Session、Cookie失效的问题。本文将详细介绍如何解决这些问题。 首先,跨域是由于浏览器的安全策略限制,同一源...
- 要注意的是,当使用Session时,Nginx需要配置负载均衡策略以考虑Session共享,比如使用ip_hash策略,确保同一用户的请求始终被转发到同一台服务器。 6. **部署LNMP环境**: - LNMP代表Linux、Nginx、MariaDB...
5. **Nginx配置**:在Nginx的配置文件中,你可以使用`ip_hash`或`sticky`模块来基于用户的IP地址或特定cookie保持会话粘滞,确保同一用户的请求始终路由到同一台Tomcat服务器,以减少Session同步的需求。 6. **测试...
2. 配置`Nginx`:在`nginx.conf`配置文件中,我们需要定义一个upstream块,列出所有`Tomcat`服务器的IP地址和端口号,例如: ```nginx upstream tomcat_cluster { server tomcat1.example.com:8080; server ...
一种常见的方式是使用cookie或者URL重写来携带session ID,但是这种方法存在安全性问题。更安全的解决方案是使用Nginx的proxy_pass指令将session信息转发到后端服务器,并配置Tomcat使用相同的session存储机制,如...
在构建分布式系统时,Session共享是一个关键问题,特别是在使用多个应用服务器(如Tomcat)和负载均衡器(如Nginx)的环境中。本配置主要针对"tomcat8+nginx1.14+jdk8"的环境,目的是实现Session数据在多台Tomcat...
在现代Web应用开发中,确保用户会话(session)在多台服务器之间共享是一项关键任务。这有助于提高系统的可扩展性和容错性,因为用户在切换服务器时无需重新登录或丢失状态信息。本主题将详细讲解如何利用Nginx、...
3. **基于Cookie的Session共享**:利用Cookie保存Session标识符,但在分布式环境下可能遇到Cookie被浏览器阻止的情况。 4. **基于缓存的Session共享**:本方案选用Redis作为中间件,实现Session数据的快速读写和共享...
在分布式环境中,将session数据存储在Memcached中可以确保所有服务器都能访问同一份session数据,实现session共享。 为了实现Nginx、Tomcat和Memcached之间的session共享,我们需要进行以下步骤: 1. **配置...
然而,当多个Tomcat实例构成集群时,会面临一个问题:用户session的共享。Session是Web应用程序用来跟踪用户状态的重要机制,如果不能在集群间共享,用户在切换服务器时可能会失去登录状态,导致用户体验下降。为...
- **跨域的概念**:客户端请求的不同服务器如果不在同一IP、端口、域名或主机名下,则认为是跨域请求。 - **域的定义**:在应用模型中,一个完整且具有独立访问路径的功能集合被称为一个“域”。 ##### 2. Cookie...
当用户再次访问同一网站时,浏览器会自动将这些Cookie发送回服务器,从而帮助服务器识别用户。 - Session:服务器在内存中创建一个会话对象,分配给每个用户一个唯一的会话ID,并将其通过Cookie返回给客户端。后续...
1. 在BIG-IP上创建虚拟服务器,这代表对外公开的IP地址和端口,接收来自客户端的请求。 2. 配置后端服务器池,包含WebLogic集群的所有实例。 3. 设置负载均衡算法,如轮询、最少连接或基于权重的分配。 4. 开启会话...
WebApi 跨域问题主要源于浏览器的同源策略,这是一种安全机制,限制JavaScript或Cookie只能访问同一源(协议+域名+端口)下的内容。在实际开发中,当WebApi作为一个独立的服务,例如数据服务层,而MVC项目作为前端...
在构建高性能、高可用性的Web应用系统时,通常会采用Nginx作为反向代理和负载均衡器,Tomcat作为Java应用服务器,而Memcached作为分布式缓存来处理session共享问题。本文将详细讲解如何利用Nginx、Tomcat和Memcached...
3. **一致性哈希**:通过一致性哈希算法,确保相同IP的请求始终被路由到同一台服务器,从而保证Session的连续性。尽管在服务器故障或水平扩展时可能出现Session丢失或路由问题,但一致性哈希在大多数情况下是可接受...
4. **SSL卸载**:haproxy可以处理SSL加密的连接,减轻服务器负担,并且支持SNI(Server Name Indication)扩展,为多域名共享同一IP地址提供支持。 5. **统计与监控**:haproxy提供丰富的统计信息,包括连接数、响应...