12cd使用了很多的二级域名,类似javaeye的频道栏目。在tomcat6.0下跨域会造成session丢失。当时也没找到tomcat哪里可以设置session cookies地方。
所以就自己设计了一套解决方案。
12cd目前前端使用的是Apache2,应用服务器是tomcat6.0. Apache2 主要提供虚拟主机以及负载均衡的作用,通讯使用的是AJP.
下面介绍一下实现步骤:
1 建立一张onlineusers内存表
CREATE TABLE `onlineusers` (
`id` bigint(20) NOT NULL,
`operations` varchar(600) DEFAULT NULL,
`last_active_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`login_time` timestamp NULL DEFAULT NULL,
`s_sessionId` varchar(80) DEFAULT NULL,
`s_ramdon` varchar(80) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MEMORY DEFAULT CHARSET=gbk CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC
id 存的使用户表id
last_active_time 记录用户最后一次操作时间
s_ramdon 这个存储是随机产生的32位字符串。后面会有用途。
2 当用户进行登录操作时
验证完成后写入一个cookie,内容包括用户ID,用户名,用户密码,以及一个随机产生的32位字符串A,用一定的形式组织后加密。
接着往onlineusers表插入相应的记录。其中s_ramdon 保存的刚才那个字符串A。
3 提供一个filter
当用户在做操作的时候,比如访问用户中心的时候,filter会做一下工作:
- filter检查用户的cookie以及onlineusers,如果缺少两个中的任何一个记录,我们就判定用户没有登录,清空相关记录,删除session中uid属性。
- 假设存在相关cookie和onlineusers表的记录,对他们进行比对。
- 对比不一致(比如有人篡改cookie等) 清除cookie以及onlineusers相关记录,删除session中uid属性
- 符合条件后,我们判断用户的session是否有uid属性,如果没有我们为他设置uid属性,并更新onlinusers 的last_active_time 字段。
- 之后所有的流程不变,根据session中是否包含uid判断用户是否登录以及是否允许相关操作
4 后台提供一个必要的定时器
我们后台有个定时器,定期清除onlineusers表中超过半小时内没有任何更新的记录,并且删除用户相应的cookie,清空session.
这就相当与用户session失效登出
Ok 工作就这么多。看看这种方案给我们带来了那些好处
- 已经可以做到跨二级域名了。因为我们cookie的domain是设置到根域下的.12cd.com
- 轻松统计在线用户 只要简单查询 onlinusers表即可。我们网站有个功能就是可以查看到到空间留言的人的性别和是否现在在线就是通过查询onlineusers表实现的
- 还有一个比较有趣的增值功能是实现了集群和无中断更新部署。这个我们在下一篇文章中会提到
另外javaeye提供了用户正在做什么的功能。12cd 也有类似的功能。曾经咨询过robbin javaeye是如何实现,robbin 说是通过内存表记录用户的url来进行判断的。12cd则主要是通过Hibenrate的interceptor回调来实现。比如对日记有 保存操作,那就说明用户正在写日记。这个是题外话了
分享到:
相关推荐
在开发Web应用时,跨域问题常常困扰着开发者。跨域是由于浏览器的同源策略(Same-Origin Policy)限制,导致不同源的请求无法互相访问。然而,随着现代Web服务的发展,API接口的广泛使用,跨域问题变得越来越普遍。...
在IT行业中,尤其是在Web开发领域,跨域资源共享(CORS,Cross-Origin Resource Sharing)是一个重要的概念,它允许浏览器向不同的源(域名、协议或端口)发送Ajax请求,以突破同源策略的限制。Tomcat作为一款广泛...
CORS为解决这个问题提供了一种安全的方式。 `cors-filter-1.7.jar` 和 `java-property-utils-1.9.jar` 是在Java环境中实现CORS跨域访问时常用的两个库。`cors-filter-1.7.jar` 包含了一个过滤器,该过滤器能够处理...
在Web开发中,跨域问题是一个常见的挑战,它涉及到浏览器的同源策略限制,防止恶意网站获取或篡改其他网站的数据。 Java Property Utils库提供了一系列方法,帮助开发者方便地读取、写入和管理Java系统的属性。这些...
最全面关于J2EE跨域资源共享的解决方案以及所需要依赖的Jar包,cors-filter-1.7.jar,java-property-utils-1.9.jar,.......看完这些还不能解决你的问题,联系QQ:1552298726
标题中的“cors-filter-1.7.jar”和“java-property-utils-1.9.jar”是两个Java库的JAR文件,它们在Java开发中扮演着重要角色,特别是对于Web应用程序。这里,我们将深入探讨这两个库的功能和它们在“jasperserver”...
在Web应用开发中,跨域问题是一个常见的挑战,特别是在利用Ajax进行异步数据交互时。由于浏览器的安全策略,不同源(域名、协议或端口)之间的请求会被阻止,除非服务器允许这些跨域请求。在GeoServer的环境中,当...
在IT行业中,尤其是在Web开发领域,跨域资源共享(CORS,Cross-Origin Resource Sharing)是一个重要的概念,它允许浏览器向不同源的服务器发送Ajax请求。在这个场景中,我们关注的两个jar包——"cors-filter-1.7....
在开发Web应用时,开发者经常会遇到“跨域”(CORS)的问题,这限制了浏览器对不同源的请求。"Allow-Control-Allow-Origin"是解决跨域问题的一种常见方法,尤其在进行本地调试时更为关键。谷歌浏览器提供了一个名为...
在IT行业中,尤其是在Web开发领域,跨域资源共享(CORS,Cross-Origin Resource Sharing)是一个重要的概念,它允许浏览器从不同的源请求资源,以解决同源策略的限制。Tomcat是Apache软件基金会的一个开源项目,是一...
PDFJS是Mozilla开发的一个JavaScript库,用于在浏览器中渲染PDF文档。这个库允许开发者无需借助任何插件,就能在Web应用中实现PDF文件的在线预览。在处理跨域问题时,由于同源策略的限制,直接加载远程PDF可能会遇到...
标题中的“Allow-Control-Allow-Origin”是指一种用于解决浏览器同源策略限制的技术,它涉及到Web开发中的跨域资源共享(CORS)机制。同源策略是浏览器为了保护用户数据安全而实施的一项安全策略,它禁止不同源的...
在开发Web应用时,我们经常会遇到跨域问题,这主要是由于浏览器的安全策略限制了不同源之间的数据交互。针对这个问题,Tomcat服务器提供了多种解决方案,其中之一就是通过使用特定的jar包来处理跨域请求。这里提到的...
总的来说,CORS-filter-1.7.jar和java-property-utils-1.9.jar这两个库在Java Web开发中扮演着重要角色,一个是解决前后端跨域问题,另一个则是处理配置文件的读写。理解并掌握这两个库的使用,对于提升Web应用的...
在现代Web开发中,跨域资源共享(CORS)是一个重要的概念,它允许浏览器在不同源之间发送Ajax请求。Spring框架提供了灵活的解决方案来处理跨域请求。本篇将详细讲解如何利用Spring解决跨域问题,以及如何使用`cors-...
总的来说,这两个Java库文件是Java开发中的重要组件,它们帮助开发者处理跨域问题以及提供实用的工具类。了解并熟练运用这些库,可以显著提升Java应用的效率和质量。在实际项目中,开发者通常会将这些库通过Maven或...
在IT行业中,尤其是在Web开发领域,跨域问题是一个常见的挑战,尤其当涉及到不同源的HTTP请求时。Tomcat,作为一款广泛使用的Java Servlet容器,有时也需要处理这样的问题。本篇文章将详细探讨如何利用提供的jar包...
虽然CORS增加了开发的灵活性,但也需要谨慎使用,因为放宽跨域限制可能导致安全风险。应确保只允许必要的源访问你的API,避免敏感数据泄露。 总的来说,"javaweb COR 跨域jar包"提供了一个简单易用的解决方案,...
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> <init-param> <param-name>cors.allowOrigin</param-name> <param-value>*</param-value> </init-param> <init-param> <param-name...