- 浏览: 792883 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (981)
- javascript (102)
- java (212)
- JQuery (81)
- 幽默笑话 (2)
- 只言片语 (6)
- 开发小记 (283)
- Hibernate (17)
- DWR (4)
- SQL (10)
- spring-ibatis (8)
- linux (24)
- Struts1 (8)
- Struts2 (16)
- spring (42)
- Mybatis (16)
- css (18)
- servlet (8)
- jdbc (4)
- jsp (1)
- spring-jdbc (2)
- FreeMarker (2)
- MySQL (24)
- JQuery-Grid (7)
- jstl (5)
- 正则表达式 (1)
- 面试集锦 (86)
- unix (18)
- 开发工具 (23)
- ajax (5)
- webservice (4)
- log4j (3)
- oracle (15)
- extjs (14)
- 其他 (9)
- 优秀技术参考地址 (1)
- 性能 (3)
- 数据库 (25)
- 算法 (15)
- 设计模式 (10)
- Python (3)
- AIX (5)
- weblogic (1)
- shell (14)
- quartz (5)
- 图形文件FusionCharts (1)
- Websphere (4)
- 转载 (5)
- hadoop (1)
- highchart (24)
- perl (22)
- DB2 (7)
- JBoss (1)
- JQuery Easy UI (9)
- SpringMVC (5)
- ant (5)
- echart (9)
- log4J配置 (3)
- 多线程 (10)
- 系统架构 (7)
- nginx (3)
- loadrunner1 (1)
- 分布式 (1)
- Dubbo (1)
- Redis (2)
- JMS (4)
- 自动化测试 (3)
- Spring循环依赖的三种方式 (1)
- spring-boot (2)
- 高级测试 (9)
- github (2)
- sonar (1)
- docker (6)
- web前端性能优化 (1)
- spring-aop (6)
- rabbit (1)
- ELK (1)
- maven (1)
- minio (1)
最新评论
-
zengshaotao:
jstl1point0 写道很好啊,如果有带Session会话 ...
Nginx+Tomcat搭建高性能负载均衡集群 -
jstl1point0:
很好啊,如果有带Session会话的怎么搞呢
Nginx+Tomcat搭建高性能负载均衡集群
final声明的方法不能被重写,但是可以被重载,重载的各个方法是对象的不同入口。java运行时系统退出之后,后面的语句都不在执行,包括finally语句,return语句。皮之不在,毛将焉附。
1、Session的存储方式。
session其实分为客户端Session和服务器端Session。
当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个 SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在 HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端。这个SessionID就是保存在客户端的,属于客户端Session。
其实客户端Session默认是以cookie的形式来存储的,所以当用户禁用了cookie的话,服务器端就得不到SessionID。这时我们可以使用url的方式来存储客户端Session。也就是将SessionID直接写在了url中,当然这种方法不常用。
我们大多数提到的Session都是指服务器端Session。他有三种存储方式(自定义存储在这里不做讨论):
1.1保存在IIS进程中:
保存在IIS进程中是指把Session数据保存在IIS的运行的进程中,也就是inetinfo.exe这个进程中,这也是默认的Session的存方式,也是最常用的。
这种方式的优点是简单,性能最高。但是当重启IIS服务器时Session丢失。
1.2.保存在StateServer上
这种存储模式是指将Session数据存储在一个称为Asp.Net状态服务进程中,该进程独立于Asp.Net辅助进程或IIS应用程序池的单独进程,使用此模式可以确保在重新启动Web应用程序时保留会话状态,并使会话状态可以用于网络中的多个Web服务器。
1.3.保存在SQL Server数据库中
可以配置把Session数据存储到SQL Server数据库中,为了进行这样的配置,程序员首先需要准备SQL Server数据服务器,然后在运行.NET自带安装工具安装状态数据库。
这种方式在服务器挂掉重启后都还在,因为他存储在内存和磁盘中。
下面是这三种方式的比较:
InProc
StateServer
SQLServer
存储物理位置
IIS进程(内存)
Windows服务进程(内存)
SQLServer数据库(磁盘)
存储类型限制
无限制
可以序列化的类型
可以序列化的类型
存储大小限制
无限制
使用范围
当前请求上下文,对于每个用户独立
生命周期
第一次访问网站的时候创建Session超时后销毁
优点
性能比较高
Session不依赖Web服务器,不容易丢失
缺点
容易丢失
序列化与反序列化消耗CPU资源
序列化与反序列化消耗CPU资源,从磁盘读取Session比较慢
使用原则
不要存放大量数据
2、在nfig中配置Session
nfig文件中的Session配置信息:
复制代码 代码如下:
<sessionState mode="Off|InProc|StateServer|SQLServer"
cookieless="true|false"
timeout="number of minutes"
stateConnectionString="tcpip=server:port"
sqlConnectionString="sql connection string"
stateNetworkTimeout="number of seconds"
/>
mode 设置将Session信息存储到哪里:
— Off 设置为不使用Session功能;
— InProc 设置为将Session存储在进程内,就是ASP中的存储方式,这是默认值;
— StateServer 设置为将Session存储在独立的状态服务中;
— SQLServer 设置将Session存储在SQL Server中。
cookieless 设置客户端的Session信息存储到哪里:
— ture 使用Cookieless模式;这时客户端的Session信息就不再使用Cookie存储了,而是将其通过URL存储。比如网址//localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245)/default.aspx
— false 使用Cookie模式,这是默认值。
timeout 设置经过多少分钟后服务器自动放弃Session信息。默认为20分钟。
stateConnectionString 设置将Session信息存储在状态服务中时使用的服务器名称和端口号,例如:"tcpip=127.0.0.1:42424”。当mode的值是StateServer是,这个属性是必需的。(42424是默认端口)。
sqlConnectionString 设置与SQL Server连接时的连接字符串。例如"data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"。当mode的值是SQLServer时,这个属性是必需的。
stateNetworkTimeout 设置当使用StateServer模式存储Session状态时,经过多少秒空闲后,断开Web服务器与存储状态信息的服务器的TCP/IP连接的。默认值是10秒钟。
下面来说下用StateServer和SqlServer来存储Session的方法
2.1 StateServer
第1步是打开状态服务。依次打开“控制面板”→“管理工具”→“服务”命令,找到ASP.NET状态服务一项,右键单击服务选择启动。
如果你正式决定使用状态服务存储Session前,别忘记修改服务为自启动(在操作系统重启后服务能自己启动)以免忘记启动服务而造成网站Session不能使用
第2步,在system.web节点中加入:stateNetworkTimeout="20"> stateConnectionString表示状态服务器的通信地址(IP:服务端口号)。由于我们现在在本机进行测试,这里设置成本机地址127.0.0.1。状态服务默认的监听端口为42422。当然,您也可以通过修改注册表来修改状态服务的端口号。
(修改注册表来修改状态服务的端口号的方法:在运行中输入regedit启动注册表编辑器—依次打开HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesaspnet_stateParameters节点,双击Port选项—选择基数为十进制,然后输入一个端口号即可。)
2.2 SqlServer
在SQL Server中执行一个叫做InstallSqlState.sql的脚本文件。这个脚本文件将在SQL Server中创建一个用来专门存储Session信息的数据库,及一个维护Session信息数据库的SQL Server代理作业。我们可以在以下路径中找到那个文件:
[system drive]\winnt\Microsoft.NET\Framework\[version]\
然后打开查询分析器,连接到SQL Server服务器,打开刚才的那个文件并且执行。稍等片刻,数据库及作业就建立好了。这时,你可以打开企业管理器,看到新增了一个叫ASPState的数据库。
修改mode的值改为SQLServer。注意,还要同时修改sqlConnectionString的值,格式为:sqlConnectionString="data source=localhost; Integrated Security=SSPI;"(这种是通过windows集成身份验证)
3、Session的生命周期
Session的生命周期其实在第一节已经讲过了,和不同的存储过程有关。
4、遍历以及销毁Session
4.1遍历:
复制代码 代码如下:
System.Collections.IEnumerator SessionEnum = Session.Keys.GetEnumerator();
while (SessionEnum.MoveNext())
{
Response.Write(Session[SessionEnum.Current.ToString()].ToString() + " ");
}
4.2 销毁:Session.Abandon()。
1、Session的存储方式。
session其实分为客户端Session和服务器端Session。
当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个 SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在 HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端。这个SessionID就是保存在客户端的,属于客户端Session。
其实客户端Session默认是以cookie的形式来存储的,所以当用户禁用了cookie的话,服务器端就得不到SessionID。这时我们可以使用url的方式来存储客户端Session。也就是将SessionID直接写在了url中,当然这种方法不常用。
我们大多数提到的Session都是指服务器端Session。他有三种存储方式(自定义存储在这里不做讨论):
1.1保存在IIS进程中:
保存在IIS进程中是指把Session数据保存在IIS的运行的进程中,也就是inetinfo.exe这个进程中,这也是默认的Session的存方式,也是最常用的。
这种方式的优点是简单,性能最高。但是当重启IIS服务器时Session丢失。
1.2.保存在StateServer上
这种存储模式是指将Session数据存储在一个称为Asp.Net状态服务进程中,该进程独立于Asp.Net辅助进程或IIS应用程序池的单独进程,使用此模式可以确保在重新启动Web应用程序时保留会话状态,并使会话状态可以用于网络中的多个Web服务器。
1.3.保存在SQL Server数据库中
可以配置把Session数据存储到SQL Server数据库中,为了进行这样的配置,程序员首先需要准备SQL Server数据服务器,然后在运行.NET自带安装工具安装状态数据库。
这种方式在服务器挂掉重启后都还在,因为他存储在内存和磁盘中。
下面是这三种方式的比较:
InProc
StateServer
SQLServer
存储物理位置
IIS进程(内存)
Windows服务进程(内存)
SQLServer数据库(磁盘)
存储类型限制
无限制
可以序列化的类型
可以序列化的类型
存储大小限制
无限制
使用范围
当前请求上下文,对于每个用户独立
生命周期
第一次访问网站的时候创建Session超时后销毁
优点
性能比较高
Session不依赖Web服务器,不容易丢失
缺点
容易丢失
序列化与反序列化消耗CPU资源
序列化与反序列化消耗CPU资源,从磁盘读取Session比较慢
使用原则
不要存放大量数据
2、在nfig中配置Session
nfig文件中的Session配置信息:
复制代码 代码如下:
<sessionState mode="Off|InProc|StateServer|SQLServer"
cookieless="true|false"
timeout="number of minutes"
stateConnectionString="tcpip=server:port"
sqlConnectionString="sql connection string"
stateNetworkTimeout="number of seconds"
/>
mode 设置将Session信息存储到哪里:
— Off 设置为不使用Session功能;
— InProc 设置为将Session存储在进程内,就是ASP中的存储方式,这是默认值;
— StateServer 设置为将Session存储在独立的状态服务中;
— SQLServer 设置将Session存储在SQL Server中。
cookieless 设置客户端的Session信息存储到哪里:
— ture 使用Cookieless模式;这时客户端的Session信息就不再使用Cookie存储了,而是将其通过URL存储。比如网址//localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245)/default.aspx
— false 使用Cookie模式,这是默认值。
timeout 设置经过多少分钟后服务器自动放弃Session信息。默认为20分钟。
stateConnectionString 设置将Session信息存储在状态服务中时使用的服务器名称和端口号,例如:"tcpip=127.0.0.1:42424”。当mode的值是StateServer是,这个属性是必需的。(42424是默认端口)。
sqlConnectionString 设置与SQL Server连接时的连接字符串。例如"data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind"。当mode的值是SQLServer时,这个属性是必需的。
stateNetworkTimeout 设置当使用StateServer模式存储Session状态时,经过多少秒空闲后,断开Web服务器与存储状态信息的服务器的TCP/IP连接的。默认值是10秒钟。
下面来说下用StateServer和SqlServer来存储Session的方法
2.1 StateServer
第1步是打开状态服务。依次打开“控制面板”→“管理工具”→“服务”命令,找到ASP.NET状态服务一项,右键单击服务选择启动。
如果你正式决定使用状态服务存储Session前,别忘记修改服务为自启动(在操作系统重启后服务能自己启动)以免忘记启动服务而造成网站Session不能使用
第2步,在system.web节点中加入:stateNetworkTimeout="20"> stateConnectionString表示状态服务器的通信地址(IP:服务端口号)。由于我们现在在本机进行测试,这里设置成本机地址127.0.0.1。状态服务默认的监听端口为42422。当然,您也可以通过修改注册表来修改状态服务的端口号。
(修改注册表来修改状态服务的端口号的方法:在运行中输入regedit启动注册表编辑器—依次打开HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesaspnet_stateParameters节点,双击Port选项—选择基数为十进制,然后输入一个端口号即可。)
2.2 SqlServer
在SQL Server中执行一个叫做InstallSqlState.sql的脚本文件。这个脚本文件将在SQL Server中创建一个用来专门存储Session信息的数据库,及一个维护Session信息数据库的SQL Server代理作业。我们可以在以下路径中找到那个文件:
[system drive]\winnt\Microsoft.NET\Framework\[version]\
然后打开查询分析器,连接到SQL Server服务器,打开刚才的那个文件并且执行。稍等片刻,数据库及作业就建立好了。这时,你可以打开企业管理器,看到新增了一个叫ASPState的数据库。
修改mode的值改为SQLServer。注意,还要同时修改sqlConnectionString的值,格式为:sqlConnectionString="data source=localhost; Integrated Security=SSPI;"(这种是通过windows集成身份验证)
3、Session的生命周期
Session的生命周期其实在第一节已经讲过了,和不同的存储过程有关。
4、遍历以及销毁Session
4.1遍历:
复制代码 代码如下:
System.Collections.IEnumerator SessionEnum = Session.Keys.GetEnumerator();
while (SessionEnum.MoveNext())
{
Response.Write(Session[SessionEnum.Current.ToString()].ToString() + " ");
}
4.2 销毁:Session.Abandon()。
发表评论
-
选股神器
2022-08-20 15:07 227最近闲来无事,突发奇想,将自己的选股思路自动化,计算机化。。 ... -
rpm安装jdk,设置环境变量
2019-05-12 22:49 6401、将jdk的rpm包拷贝到 ... -
java安全编码
2019-01-18 22:31 487软件安全问题,一般 ... -
生产者消费者
2018-07-01 21:33 433package function.thread; i ... -
打印mybatis的执行语句到控制台和文件
2017-12-13 15:11 820log4j.rootLogger=INFO,CONSOLE, ... -
MyBatis防止SQL注入
2017-11-14 13:35 991SQL注入是一种代码注入技术,用于攻击数据驱动的应 ... -
java中类的加载顺序介绍(ClassLoader)
2017-11-14 11:41 8241、ClassNotFoundExcetpion 我们在 ... -
守护线程
2017-11-13 16:40 440对于线程,有个守护的线程的概念。如何理解呢?比如A线程里,n ... -
类加载机制及反射
2017-09-24 08:45 593一、Java类加载机制 ... -
java+selenium2 自动化测试框架
2017-09-15 09:36 1023package web.selenium2; ... -
JMS实例
2017-08-21 15:40 4831. JMS架构 Java 消息服务(Java M ... -
linux设置java环境
2017-08-07 16:47 458linux配置java环境变量(详细) 一. 解压安装jdk ... -
分布式
2017-07-19 12:12 455转载请注明出处:http://blog.csdn.net/l ... -
tomcat+nginx+redis
2017-07-18 16:46 497应用系统的基本架构: -
java调用远程机器的shell脚本
2017-07-14 12:19 1598此程序的目的是执行远程机器上的Shell脚本。 【环境参数 ... -
生产者消费者进阶(带有condition)
2017-05-09 17:56 593package function.thread; ... -
多线程之 CountDownLatch
2017-05-01 13:01 525package function.thread; ... -
判断服务器类型
2017-04-12 10:52 493开发时一般用tomcat,然后在测试环境发布时使用的是web ... -
IE的不同文本浏览模式页面显示
2017-04-11 14:34 547现象描述:最近在遇到的问题就是在在Chrome,火狐页面都正 ... -
java中Filter、Servlet、Listener的学习
2017-03-29 21:52 4591、Filter的功能filter功能,它使用户可以改变一个 ...
相关推荐
**Session存储方式的比较** - **InProc**:性能最佳,但稳定性差,适合小型应用。 - **StateServer**:提供跨服务器的Session支持,适合分布式环境,但需要额外的服务器资源。 - **SQLServer**:数据持久化,适合...
下面介绍一种基于Mysql数据库的session存储方式.首先要进行的配置如下:1>php.ini中将session.save_handler = files 中的files改为User,其他默认即可,重启Apache(好像没改也行啊)2>本实例创建的数据库名叫php, ...
首先,让我们了解一下session的基本概念。Session是一种在服务器端存储用户状态信息的技术,用于跟踪用户在网站中的行为。...开发者需要权衡这些因素,根据项目需求选择最适合的session存储方式。
通过配置Web.config文件中的`<sessionState>`节点,开发人员可以轻松地切换Session存储的位置。虽然这种方法会带来额外的网络延迟,但考虑到其在可用性和扩展性方面的优势,对于大多数企业级应用来说,这是一个值得...
在分布式环境中,每个服务器节点都可能独立处理用户的请求,传统的Session存储方式(例如在单个服务器的内存中)无法满足需求,因为服务器之间无法共享Session信息。这就引入了Redis,它能够作为一个中央Session仓库...
InProc模式是最常见的Session存储方式,它将Session数据存储在ASP.NET工作进程中。优点是速度快,但缺点是当工作进程重启(如应用池回收)时,所有Session数据将丢失。 3. **StateServer模式** StateServer模式将...
JavaScript Session,顾名思义,就是利用JavaScript来管理用户会话的数据存储。它允许开发者在用户浏览网站的过程中保存和检索特定的信息,比如用户的登录状态、购物车内容等。在单页面应用程序中,由于所有的交互都...
例如,如果session存储方式设置为内存,而服务器重启或内存资源耗尽,session数据将丢失。此时,可以考虑将session存储改为数据库或分布式缓存,如Redis,以提高容错性和可扩展性。 **三、代码逻辑错误** 在代码中...
在分布式环境中,由于用户请求可能被路由到不同的服务器节点,传统的session存储方式(如JVM内存)无法满足需求,因此需要借助外部存储来实现session共享。 首先,`Nginx` 是一个高性能的反向代理服务器,常用于...
在分布式系统中,单一服务器上的session存储方式不再适用,因为用户请求可能会被路由到不同的服务器上。为了实现跨域session共享,我们可以使用例如Redis或Memcached这样的分布式缓存来存储session。首先,需要添加...
传统的session存储方式,如文件或数据库,可能无法满足高并发、高可用性的需求。为了解决这个问题,我们可以利用memcache(或其升级版memcached)来实现session的存储和共享,从而达到session跨服务器跨域的目的。...
通过Spring Session,开发者可以很容易地将session存储迁移到Redis、MongoDB、Hazelcast等外部存储系统。 在本文的背景中,使用Redis作为存储方式时,由于Spring Session的监听机制,可能会导致创建大量的...
传统的Session存储方式是将数据存放在服务器内存中,但随着高并发访问和分布式部署的需求增加,这种方式逐渐显得力不从心。为了解决这个问题,一种常见的解决方案是使用外部存储如Redis来管理Session,例如“Tomcat-...
二、Session存储方式选择 默认情况下,ASP.NET使用In-Proc模式,即Session数据存储在Web服务器的内存中。这种方式效率高,但服务器重启或应用程序池回收会导致Session丢失。为避免这种情况,可以改为StateServer或...
session驱动类 session存入数据库 数据库存储session 用于session存入数据库
1. **自定义Session存储**:可以通过重写PHP内置的Session处理器来实现自定义的Session存储方式,如使用数据库或其他持久化存储。 2. **Session复制**:在多服务器环境下,可能需要实现Session复制或共享机制,以...
然而,随着应用规模的增长,多服务器集群的需求会显现,此时单台服务器的session存储方式就不再适用,因为不同的服务器无法共享同一份session信息。为了解决这个问题,我们可以将session数据存储到分布式缓存系统,...
在J2EE session管理中,Memcached可以作为集中式的session存储,替代默认的基于cookie或本地服务器内存的session存储方式。 实现步骤如下: 1. **配置Memcached服务器**:首先,你需要安装并运行一个Memcached服务...