`

session跨域共享

 
阅读更多
多个tomcat服务,使用nginx负载均衡
同一个服务器配置,多个tomcat:





package org.xdemo.example.SpringActivemq.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
 
/**
 * @作者hailong
 * @日期 2017-2-2上午10:54:11
 * @描述 测试 
 */
@Controller
@RequestMapping("/sessonShare")
public class SessionShareController {

	/**
     * 设定session值
     * localhost:8082/SpringExample/sessonShare/set?message=3
     * 
     * @param message
     * @return String
     */
    @RequestMapping("set")
    @ResponseBody
    public String set(@RequestParam("message")String message, HttpSession session, 
    		HttpServletRequest request, HttpServletResponse response){

    	HttpSession session2 = request.getSession();
    	session2.setAttribute("username", message);

    	return "username=" + message;
    }

	/**
     * 取得session值
     * @param message
     * @return String
     */
    @RequestMapping("get")
    @ResponseBody
    public String get(HttpSession session, 
    		HttpServletRequest request, HttpServletResponse response){

    	HttpSession session2 = request.getSession();
    	return  session2.getAttribute("username") +"";
    }
}

此时是不能共享session的。


解决方案一:
在nginx-config配置文件加入ip_hash
就可以共享了




解决方案二:
把session放jvm里,因为nginxB是对jvm直接交流的。所以在nginxB可以配置。

还要配置tomcat下setting.xml文件。
<Engine name="Catalina" defaultHost="localhost">


解决方案三:使用redis
http://blog.csdn.net/patrickyoung6625/article/details/45694157
把session数据保存到内存以外的一个统一的地方,例如Memcached/Redis等数据库中
关于redis在centos服务器上安装:http://572327713.iteye.com/admin/blogs/2346196


下载maven_jar去aliyun速度快:
http://maven.aliyun.com/nexus/#nexus-search;quick~spring session
redis desktop manager管理工具:
http://download.csdn.net/download/li295214001/9398955
spring配置参考:
http://www.cnblogs.com/qlong8807/p/5557271.html
spring.xml文件配置(非spring_mvc的xml文件):
    <!-- 20170222 -->
    <!-- redis spring-session -->
	<!-- 使用spring session托管session,将session放入redis中 -->
    <bean id="redisHttpSessionConfiguration"  class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration" >
        <property name="maxInactiveIntervalInSeconds" value="600" />
     </bean>
     <!-- spring-data-redis -->
     <bean
        class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <!-- redis 配置 -->
        <property name="hostName" value="192.168.92.129"/>
        <property name="port" value="6379" />
    </bean>

web.xml配置:
<!--  分布式Session共享Filter --> 
     <filter>
        <filter-name>springSessionRepositoryFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>  
    </filter>
    <filter-mapping> 
        <filter-name>springSessionRepositoryFilter</filter-name>
        <url-pattern>/*</url-pattern>  
    </filter-mapping>

pom.xml配置:
        <!-- 集群中,session共享 ,可以完全脱离spring去用-->
	    <dependency>  
	        <groupId>org.springframework.session</groupId>
	        <artifactId>spring-session</artifactId>
	        <version>1.3.0.RELEASE</version>
	    </dependency>
	    <dependency>
		    <groupId>org.springframework.data</groupId>  
		    <artifactId>spring-data-redis</artifactId>  
		    <version>1.4.1.RELEASE</version>  
		</dependency>
		<!--redis客户端-->
		<dependency>
		    <groupId>redis.clients</groupId>
		    <artifactId>jedis</artifactId>
		    <version>2.6.2</version>
		</dependency>

注意:jedis用2.8以上版本会出其他问题。

以上配置好后,放在不同tomcat下运行,放在同一个服务器tomcat端口不同,配置到nginx软负载,他们的session是共享的,可以下载redis桌面管理工具进行查看。



关于nginx配置:


/**
     * 设定与取得session值
     * 
     * @param message
     * @return String
	 * @throws UnknownHostException 
     */
    @RequestMapping("gsSession")
    @ResponseBody
    public String gsSession(@RequestParam("message")String message, @RequestParam("action")String action, HttpSession session, 
    		HttpServletRequest request, HttpServletResponse response) throws UnknownHostException{

    	HttpSession session2 = request.getSession();
    	
    	String addr = InetAddress.getLocalHost().getHostAddress();
    	String hostName = InetAddress.getLocalHost().getHostName();
    	
    	String message2 = "addr:"+ addr +" hostName: " + hostName;
    	
    	if("set".equals(action)){
    		//session的name是username
        	session2.setAttribute("username", message);
        	System.out.println("set:" + session.getId());
    	} else if("get".equals(action)){
    		message2 =(String)session2.getAttribute("username");
    		System.out.println("get:" + session.getId());
    	}

    	return message2;
    }
  • 大小: 37.7 KB
  • 大小: 19.9 KB
  • 大小: 19.3 KB
  • 大小: 22.6 KB
  • 大小: 52.3 KB
  • 大小: 35.2 KB
  • 大小: 23.8 KB
  • 大小: 25 KB
  • 大小: 9.4 KB
  • 大小: 14.1 KB
  • 大小: 139 KB
  • 大小: 56.2 KB
  • 大小: 26.4 KB
  • 大小: 67.9 KB
分享到:
评论

相关推荐

    java web session跨域共享(redis)

    Java Web中的Session跨域共享问题通常出现在分布式系统或者微服务架构中,多个Web服务器需要共享用户的登录状态。在传统的单体应用中,Session是存储在单一服务器上的,但随着技术的发展,应用程序往往被拆分为多个...

    Session跨域共享demo

    针对这一问题,我们可以利用特定的技术实现Session跨域共享,使得用户在访问多个相关联的二级域名时,依然能享受到无缝的体验。 本示例"Session跨域共享demo"是基于ASP.NET框架,适用于高版本的开发环境,如Visual ...

    session跨域的共享--更改配置

    当涉及到用户会话(session)管理时,跨域共享session的能力对于构建统一的用户体验至关重要。本文将深入探讨如何通过更改配置文件来实现session的跨域共享,重点是通过调整PHP的配置参数来记住用户的登录状态。 ##...

    解决springboot实现跨域session共享问题

    然而,随着Web服务的复杂性和交互性增加,跨域资源共享(CORS)和会话(Session)共享成为开发者需要面对的重要问题。本文将详细讲解如何在Spring Boot应用中解决跨域session共享的问题,并探讨防止SQL注入的相关...

    处理session跨域几种方案

    处理Session跨域问题通常涉及到多个网站或应用之间共享用户身份验证信息。Session是Web应用程序用来存储用户特定数据的一种机制,通常存储在服务器端,而Session ID通过Cookie在客户端与服务器之间传递。当用户在...

    跨域共享session (实现http跳转https 共享session)

    但是,为了提供更好的用户体验,特别是在单点登录(Single Sign-On, SSO)场景下,跨域共享session变得非常重要。 **一、跨域共享session原理** 1. **JSONP(JSON with Padding)**:JSONP是一种早期的跨域解决方案...

    基于Cookie的Session跨域.zip

    本项目"基于Cookie的Session跨域"则关注如何在分布式环境中解决Session的共享问题,通过Spring和Spring MVC框架来实现这一目标。 首先,我们来了解一下Cookie和Session的基本概念。Cookie是由服务器端发送到客户端...

    Spring Boot Redis Session 共享(Ajax 跨域)

    本教程将详细讲解如何在Spring Boot项目中利用Redis来存储和共享Session,并解决Ajax跨域问题。 首先,我们需要理解Spring Boot中的Session管理。默认情况下,Spring Boot使用内存中的HttpSession来存储用户会话...

    iframe 跨域访问session

    然而,当涉及到跨域时,`iframe` 遇到的问题之一就是无法正常访问父页面或被嵌入页面的`session`。这是因为浏览器的同源策略(Same-Origin Policy)限制了不同源之间的交互,包括`session`和`cookie`。 同源策略是...

    ThinkPHP框架实现session跨域问题的解决方法

    首先,要解决session跨域问题,关键在于设置session.cookie_domain。这个设置项允许你指定session cookie的域名。在ThinkPHP框架中,根据框架的配置文件或入口文件进行设置,来确保session能够跨域使用。 在...

    session、cookie的跨域共享

    该文件可以通过代码实例,让你清楚的理解session和cookie的意思,当你明白了这点,你就可以设计出来单点登录功能,同一账号在同一时间只能登录一次功能。同时你可以通过ie、firefox去测试你对...在此共享,你值的拥有

    Django跨域资源共享问题(推荐)

    在前后端集成测试的时候,就遇到了一些web安全相关的问题,cors跨域资源共享就是其中之一。 cors问题介绍 跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的Web...

    C#不同域名之间的Session共享

    然而,当涉及到跨域(即不同域名)的Session共享时,问题就变得稍微复杂了。本篇文章将深入探讨C#中如何实现不同域名之间的Session共享,以及这一功能的重要性和应用场景。 Session共享的主要目的是在多个网站或...

    php中http与https跨域共享session的解决方法

    在PHP开发中,HTTP和HTTPS协议的跨域共享Session是一个常见的问题。由于浏览器的同源策略限制,不同协议(HTTP和HTTPS)被视为不同的源,因此默认情况下无法共享Session。为了解决这个问题,开发者通常需要手动处理...

    PHP实现cookie跨域session共享的方法分析

    本文将深入探讨如何使用PHP实现Cookie跨域和Session共享,以及处理相关问题的方法。 首先,让我们理解Cookie和Session的基本概念。Cookie是由服务器发送到客户端(浏览器)并由客户端保存的一小段数据,通常用于...

    开发阶段:需要session共享做开发测试

    3. **Cookie管理**:要跨域共享Session,可能需要管理Set-Cookie响应头,确保Session ID能够正确地在各个域之间传递。 4. **JWT(JSON Web Tokens)**:为了解决跨域问题,开发者可能会选择使用JWT,它是一种轻量级...

    基于Java和Shell的bboss session framework跨域集群节点会话共享与监控设计源码

    该项目是一款基于Java和Shell语言的bboss session framework设计源码,专注于实现跨域集群节点之间的会话共享,并具备良好的会话监控和数据统计功能。该框架包含222个文件,包括164个Java源文件、14个XML配置文件、6...

    spring-session实现session共享

    【Spring-Session 实现Session共享】 在现代分布式系统中,由于多服务器、微服务架构的广泛应用,Session共享成为一个重要的需求。传统的HTTP Session机制在单服务器环境下工作良好,但当涉及到跨域、多服务器间的...

    高并发思维导图

    高并学习路线,maven、dubbo框架、nosql专题、消息中间件activeMQ、session跨域共享、自动化部署(png)

Global site tag (gtag.js) - Google Analytics