session是保存在服务器端没错,但是要知道哪个用户是使用什么session,通过http协议这么知道的呢?
举个例子,服务器是resin,sessionid格式是使用cookie,session失效期是30分钟,这些可以通过服务器配置文件resin.conf设置:
<session-config>
<session-max>4096</session-max>
<session-timeout>30</session-timeout>
<enable-cookies>true</enable-cookies>
<cookie-domain>yourdomain</cookie-domain>
<enable-url-rewriting>true</enable-url-rewriting>
</session-config>
进去一个使用session的jsp页面,检查response头,发现:
Set-Cookie: JSESSIONID=b5a86TcEnktd; domain=yourdomain; path=/
第一次访问的时候jsp发现这个请求没带有JSESSIONID,所以生产一个,并且set进去浏览器的cookie里面
然后第二次访问这个页面(不关闭浏览器)浏览器发现有这个cookie,对应这个domain和path,ok,
请求头包括这一行:
Cookie: JSESSIONID=b5a86TcEnktd
服务器通过这个JSESSIONID到session池里面拿session,如果拿到,证明是有效的session(因为命名随机,所以很难撞),如果没有这个session,就证明sessionid无效,生成一个新的session,然后想上面一样set进cookie
此时关闭浏览器,再打开,访问同样的页面,由于浏览器发现刚才那个cookie已经过期(存活期是浏览器期限),所以请求头并没有加上Cookie: JSESSIONID=b5a86TcEnktd这一行,服务器解释这个请求,找不到JSESSIONID,自然帮他生产一个新的,然后又通过response设置成Set-Cookie。
Set-Cookie: JSESSIONID=adqOWayWfard; domain=yourdomain; path=/
好了,这个cookie的id是adqOWayWfard,原来的那个是b5a86TcEnktd,服务器并不知道b5a86TcEnktd已经没有人使用了,所以它还是会存活到30分钟后才消失,但是此时如果有请求是使用了b5a86TcEnktd的JSESSIONID,服务器会认为是有效请求,此时的session就已经被别人盗用了~当然这种可能性很低。
但是楼主说的情况,是外部提交的问题,用session是解决不了的!
只要你访问过一次需要提交的页面,生成可提交的session,记录sessionid,然后在30分钟内,你可以用这个session提交,你可以用程序set入去http请求里面,也可以用url代session方式:
http://yourdomain/test.jsp;jsessionid=b5a86TcEnktd
服务器一样可以拿到session。
当然你可以在session里面设置一个值,比如时间,没session和间隔太短的都不许提交,这样可能有效一点,呵呵,但是httpservletreaeust.getsession(false)这个东西是没有用di,只要有sessionid就能让他get出东西出来,哈哈。
记住,http协议能让人提交,就不能防止别人用同样的http协议提交,因为http协议是没有验证和数据持续的东西的,所有东西都是通过request header、body来传送,只要我能写程序,分析你的http响应,然后做到和平常人的提交一模一样,你是没有办法禁止的,就算使用了图片验证码,我也可以取得图片来分析,得出验证码提交,这就是为什么现在图片验证码要很多干扰线、gif动态,为的就是防止ocr分析,只是数字的ocr识别率是很高的,也很容易做(用java,做过一个),所以我们要干扰干扰干扰~~~~
分享到:
相关推荐
"浅谈Cookie与Session在PHP中的应用" Cookie是浏览器保存的一种小型文本文件,用于存储用户信息,以便在用户访问网站时,服务器可以识别用户身份。Cookie可以分为两种类型:会话Cookie和持久Cookie。会话Cookie是指...
在PHP面试中经常碰到请阐述session与cookie的区别与联系,以及如何修改两者的有效时间。具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。
浅谈cookie和session cookie和session是Java Web开发中两个非常重要的概念,本篇文章将对它们进行探究和总结。 Cookie Cookie是浏览器层面的东西,存在于浏览器的请求头中,以键值对(数组)的形式存在。只要有...
Cookie和Session是两种常见的用户状态管理机制,它们在Web开发中起着至关重要的作用,用于跟踪用户的会话和存储用户数据。下面我们将深入探讨它们的区别、工作原理以及优缺点。 首先,Cookie是由服务器发送到用户...
### 浅谈HTTP协议与REST架构 #### HTTP协议概述 HTTP(Hypertext Transfer Protocol)是一种应用层协议,主要用于从Web服务器传输超文本文档至本地浏览器的传送协议。它采用客户端/服务器模式,通过TCP/IP进行通信...
为了解决这个问题,ASP.NET Core 提供了分布式 Session 支持,它可以将 Session 数据存储在分布式缓存中,如 Redis 或 SQL Server,确保在集群环境中数据的一致性。实现分布式 Session 首先需要安装相应的包,例如...
Ajax跨域请求和跨域Session是前端开发中经常遇到的问题,它们对于保证Web应用的安全性和用户体验都至关重要。在处理跨域问题时,开发人员需要注意很多细节和规则,以确保数据的正确传输和用户状态的正确识别。 首先...
在上文Nginx+Tomcat关于Session的管理中简单介绍了如何使用redis来集中管理session,本文首先将介绍默认的管理器是如何管理Session的生命周期的,然后在此基础上对Redis集中式管理Session进行分析。 Tomcat Manager...
在实际应用中,将 Axios 与 Session 结合使用时可能会遇到一些问题,本文将对此进行深入探讨。 首先,让我们来看 Axios。Axios 是一个流行的 JavaScript 库,它允许开发者在浏览器和 Node.js 环境中发起 HTTP 请求...
(o゜▽゜)o☆[BINGO!] ok,我们先看看cookie是什么东东? cookie是服务器留在客户端的用于...cookie在web中是很重要的角色,早在网景浏览器的时候就产生了cookie。cookie经常被用于用户验证系统。 1.创建cookie 函数s
【ASP.NET编程知识】浅谈谁都能看懂的单点登录(SSO)实现方式 单点登录(SSO)是一种允许用户在一个应用系统中登录后,无需再次认证即可访问其他相互信任的应用系统的机制。这提高了用户体验,简化了身份验证过程...
反之,表示登录成功,可以创建会话(session)或设置cookie以保持用户状态。 6. **安全措施**:为了增强安全性,还可以实现以下功能: - 密码哈希:存储在数据库中的密码不应为明文,应使用如bcrypt、scrypt或...
5. 在CodeIgniter配置文件中设置Redis存储Session的相关选项,包括`sess_driver`、`sess_cookie_name`、`sess_expiration`、`sess_save_path`、`sess_match_ip`、`sess_time_to_update`和`sess_regeneration_destroy...
- **浅谈PHP (CodeIgniter) 安全性注意事项**:讨论了CodeIgniter开发过程中需要注意的安全问题,如输入验证、防止SQL注入等。 - **CodeIgniter安全相关设置汇总**:提供了一系列关于CodeIgniter框架的安全配置和...
当用户打开浏览器访问Web应用时,服务器会为该用户创建一个Session,并分配一个唯一的ID,这个ID会被存储在用户的Cookie中。每次请求时,服务器通过Session ID找到相应的Session,从而获取或更新用户状态。 4. **...