Vs2005中Session 如何使用

 问:当页面中是否了frameset,发现在每个frame中显示页面的SessionID在第一次请求时都不相同,为什么?  
  答:原因是你的frameset是放在一个htm页面上而不是ASPX页面。  
  在一般情况下,如果frameset是aspx页面,当你请求页面时,它首先将请求发送到Web服务器,此时已经获得了SessionID,接着浏览器会分别请求Frame中的其他页面,这样所有页面的SessionID就是一样的,就是FrameSet页面的SessionID。  
  然而如果你使用Html页面做FrameSet页面,第一个请求将是HTML页面,当该页面从服务器上返回是并没有任何Session产生,接着浏览器会请求Frame里面的页面,这样这些页面都会产生自己的SessionID,所以在这种情况下就会出现这种问题。当你重新刷新页面时,SessionID就会一样,并且是最后一个请求页面的SessionID。  
   
  问:是否可以将不同应用程序的Session保存在相同的SQL   Server服务器的不同数据库上。  
  答:可以,请参考:  
  FIX:   Using   one   SQL   database   for   all   applications   for   SQL   Server   session   state   may   cause   a   bottleneck  
  http://support.microsoft.com/default.aspx?scid=kb;en-us;836680  
   
   
  问:在Session_End是我是否可以获得有效的HttpSessionState和HttpContext对象?  
  答:你可以在这个方法中获得HttpSessionState对象,可以直接使用Session来访问即可。但是不能获得HttpContext对象,因为该事件并没有和任何请求相关联,因此不存在上下文对象。  
   
  问:当我设置EnableSessionState为“ReadOnly”后,但是我在InProc模式下依然可以修改Session的值,这是为什么?  
  答:即使EnableSessionState标示为ReadOnly,但是在InProc模式下用户依然可以编辑Session。唯一不同的是,在请求过程中Session将不会被锁住。  
   
  问:当Session设置成cookieless后会有什么影响?  
  答:当把cookieless设置成true时,主要会有下面的约束:  
  1、在页面中不能使用绝对链接  
  2、在应用程序中在除了Http和Https之间的切换时需要完成一些其他的步骤。  
  如果发送一个链接给其他人,此时的URL里面将包含Session   ID的信息,所以两个人将公用一个Session。  
   
   
  问:为了可以顺序访问Session的状态值,Session是否提供了锁定机制?  
  答:Session实现了Reader/Writer的锁机制:  
  当页面对Session具有可写功能(即页面有<%@   Page   EnableSessionState="True"   %>标记),此时直到请求完成该页面的Session持有一个写锁定。  
  当页面对Session具有只读功能(即页面有<%@   Page   EnableSessionState="ReadOnly"   %>标记),此时知道请求完成该页面的Session持有一个读锁定。  
  读锁定将阻塞一个写锁定;读锁定不会阻塞读锁定;写锁定将阻塞所有的读写锁定。这就是为什么两个框架中的同一个页面都去写同一个Session时,其中一个要等待另一个(稍快的那个)完成后,才开始写。  
   
   
  问:如果使用了cookieless,我该如何从HTTP页面定向到HTTPS?  
  答:请尝试下面的方法:  
  String   originalUrl   =   "/fxtest3/sub/foo2.aspx";    
  String   modifiedUrl   =   "https://localhost"   +   Response.ApplyAppPathModifier(originalUrl);    
  Response.Redirect(modifiedUrl);  
   
   
  问:什么类型的对象可以保存在Session里?  
  答:这依赖使用的Session的模式,当使用的是进程内(InProc)的Session那么可以轻松的保存任何对象。如果你使用了非InProc的模式,则只能保存可以序列化和反序列化的对象,如果此时保存的对象不支持序列化,则不能保存到这种模式(非InProc)的Session里。  
   
   
  问:为什么每次请求的SessionID都不相同?  
  答:该问题可能是没有在Session里面保存任何信息引起的,即程序中任何地方都没有使用Session。当Session中保存信息之后SessionID将一直和浏览器相关,此时的SessionID将不会在变化。   

 

 

 

   
在web.config设置过时时间,如20分  
  <sessionState    
                          mode="InProc"  
                          stateConnectionString="tcpip=127.0.0.1:42424"  
                          sqlConnectionString="data   source=127.0.0.1;Trusted_Connection=yes"  
                          cookieless="false"    
                          timeout="20"    
          />  
  例子  
  如果登录成功则  
  Session["UserName"]   =   tbUserName.Text.Trim();  
  如果session为空就不能进入该页面  
  if(Session["UserName"]==null)  
  {  
          Response.Write("请登录");  
          Response.End();  
  }

 

 

 

 

 

 

页面A.  
  Session["S_LOGIN_USEREMAIL"]   =tbUserName.Text;  
  页面B  
  if(Session["S_LOGIN_USEREMAIL"]==null)  
    {  
        Response.Redirect("login.aspx");  
    }  
  else  
  {  
      tbText.Text=Session["S_LOGIN_USEREMAIL"].ToString();  
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Java Web session 是一种服务器端的机制,用于在多个请求之间保持状态。通常,我们可以使用 session 来存储用户登录信息、购物车信息等数据。 使用 session 的步骤如下: 1. 在 Servlet 获取 session 对象,通常使用 HttpServletRequest 对象的 getSession() 方法。 2. 向 session 存储数据,通常使用 session 对象的 setAttribute() 方法。 3. 从 session 获取数据,通常使用 session 对象的 getAttribute() 方法。 4. 在不需要使用 session 时,可以使用 session 对象的 invalidate() 方法将其销毁。 示例: ``` HttpSession session = request.getSession(); session.setAttribute("username", "tom"); String username = (String) session.getAttribute("username"); ``` session 在服务器端运行,并且通过一个唯一的标识符(session ID)来识别每个用户的 session,默认情况下,这个标识符是存储在 cookie 的。 ### 回答2: 在 JavaWeb 开发session 是非常重要的一个概念。Session 可以理解为一种存储用户数据的方式,其可以在用户和服务器之间建立关联,并通过 session ID 来确定具体是哪个用户发出的请求。因此,我们可以使用 session 来保存用户在应用程序的操作状态、登录状态、购物车内容等信息。 Session 的创建和销毁都是由服务器来控制的。当用户第一次访问应用程序时,服务器会自动创建一个 session,并给这个 session 分配一个唯一的 session ID。当用户进行下一次访问时,服务器会根据 session ID 来找到对应的 session,从而让用户保持相同的状态。用户关闭浏览器session过期时,session会自动销毁。 使用 session 的方法非常简单。我们可以通过以下三个步骤来使用 session: 1.获取 session 对象 我们可以通过 HttpServletRequest 的 getSession() 方法来获取 session 对象,代码示例如下: HttpSession session = request.getSession(); 通过 getSession() 方法获取到的 session 对象会在后续的请求一直存在。如果该方法传入了一个 boolean 值为 true 的参数,则在请求没有找到 session 对象时会自动创建一个新的 session。 2.向 session 存储数据 我们可以通过 session 对象的 setAttribute() 方法将数据存储到 session 。代码示例如下: session.setAttribute("username", "张三"); 这里我们将用户名 “张三” 存储到了 session ,并设置键名为 “username”。 3.从 session 读取数据 我们可以通过 session 对象的 getAttribute() 方法来读取 session 的数据。代码示例如下: String username = (String) session.getAttribute("username"); getSession() 方法返回的是一个 Object 类型的对象,需要强制类型转换。 Session使用在 web 开发是非常常见的,但是需要注意的是,过度使用 session 会导致内存占用过高,导致应用程序的性能下降。因此,在使用 session 的时候,应该尽量保证 session 的数据量较小,并定期清理不需要的 session 对象,从而避免不必要的资源浪费。 ### 回答3: JavaWebSession是一个非常重要的概念,是用来保存用户在访问网站过程需要保持的一些信息的。Session实际上就是服务器为每位用户开辟出的一块内存空间,用于存储该用户在网站上的一些信息,比如购物车的商品,用户的登录状态等等,这些信息会在用户维持连接时被保存,直到用户关闭连接或者超出一定时间后失效。 在JavaWebSession是由HttpServletSession类来实现的。创建Session需要使用request.getSession()方法,如果该用户已经有Session,则会返回该用户的Session对象,否则会生成一个新的Session对象并返回。Session的生命周期可以通过设置Session的超时时间来控制。超时时间由web.xml的<session-config>节点来配置,单位为分钟。当超时时间到达时,用户的Session会被自动销毁。 Session对象保存的数据类型是Object,因此它可以保存任意类型的对象。在Session保存对象的时候,需要进行序列化操作。一个常用的方法是使用Java自带的序列化机制,实现Serializable接口,然后将对象写入SessionSession对象的属性是键值对形式的,使用setAttribute()方法可以将数据存入Session使用getAttribute()方法可以获取Session存储的数据。在Servlet获取Session对象的代码如下: HttpSession session = request.getSession(); 如果需要获取Session的属性,则可以使用以下代码: String username = (String)session.getAttribute("username"); 而如果需要在Session存储属性,则可以使用以下代码: session.setAttribute("username", "Tom"); 总之,Session是JavaWeb非常重要的一个概念,使用它可以方便地在应用程序存储用户的一些状态和信息。在使用Session的过程,需要注意场景的限制、数据的类型以及Session的生命周期等方面的问题,合理利用Session能够提高应用程序的性能和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值