一、Session跨域
所谓session跨域就是摒弃了系统(tomcat)提供的session,而使用自定义的类似Session的机制来保存客户端数据的一种解决方案。如:通过设置cookie的domain来实现cookie的跨域传递。在cookie中传递一个自定义的session_id。这个session_id是客户端的唯一标记。将这个标记作为key,将客户端需要保存的数据作为value,在服务端进行保存(数据库保存或NOSQL)。这种机制是Session的跨域解决。
什么是域,在应用模型中一个完整的,有独立访问路径的功能集合称为一个域。如,百度称为一个应用或系统。百度下有若干的域,如搜索引擎(www.baidu.com)百度贴吧(tie.baidu.com),百度知道,百度地图等。域信息有时也称为多级域名。域的划分,以IP,端口,主机名,域名为标准,实际划分。localhost / 127.0.0.1
什么是跨域,客户端请求的服务器,IP,端口,域名,主机名任何一个不同,都称为跨域。
使用cookie跨域共享,是session跨域的一种解决方案。cookie.setDomain() 为cookie设定有效域范围,cookie.setPath() 为cookie设定有效URI范围。以上两个方法就实现了cookie跨域。这是在开发中性价比最高的跨域解决方案。
二、Spring Session 共享 (了解)
spring-session技术是spring提供的用于处理集群会话共享的解决方案。spring-session技术是将用户session数据保存到三方存储容器中。如:MySQL,redis等。
Spring-session技术是解决同域名下的多服务器集群session共享问题的。不能解决跨域session共享问题。所以互联网开发中越来越少使用这门技术。
实现步骤:
- 配置一个spring 提供的filter,实现数据拦截保存并转换为spring-session需要的会话对像。
2)必须提供一个数据库的表格信息(由spring-session提供,找spring-session-jdbc.jar/org/springframework/session/jdbc/*.sql,根据具体的数据库找对应的SQL文件,做表格的创建)。
spring-session表:保存客户端session对象的表格。
spring-session-attributes表:保存客户端session中的attributes属性数据的表格。
spring-session框架是结合Servlet技术中的HttpSession完成的会话共享机制。在代码中是直接操作HttpSession对象的。
三、Nginx Session共享
nginx中的ip_hash技术能够将某个ip的请求定向到同一台后端,这样一来这个ip下的某个客户端和某个后端就能建立起稳固的session。ip_has