本文转自:http://jinaldesai.net/stop-sharing-session-state-between-multiple-tabs-of-browser/

Scenario: By default all browsers share session state between multiple tabs. So if you logged into one tab with particular site and open internal link of the same site in new tab, you need not to worry to login again. It will automatically declare you as logged in user.

For example, if I open google and login to google.com. Now I open new tab in the same browser and type gmail.com then it will automatically logged in me and redirect to google mail, here at this step it will not ask me to log in again.

Requirements: There are some situations where we need to stop sharing session between the browser tabs. 1. Requirement to force user to provide credentials for every new tab(or any other user identifying information). 2. If user retrieves particular record(lets say order information) into two different tabs. In one tab user deletes the record and in another tab user is trying to modify the record. In this situation data will be unstable and cause error. 3. If you are building secure site like e-banking or money transactional site then you need to force user to stay only on single tab, rather than using multiple tabs for doing money transactional activities. 4. If I am administrator of customer accounts in site. Now I am accessing account of customer “ABC” and then open new tab and access account of customer “PQR”. The session is now holding information for customer “PQR” and thinks that I am working on customer “PQR”. Now after working on customer “PQR”, I am coming back to customer “ABC” (tab) and start editing it. Actually according to session information it is assuming again that I am editing customer “PQR” and the problem starts here(data discrepancy).

Solutions: 1. Prevent user from opening new tab: I have found some javascript solutions which you can deploy at client side(obviously you need to worry about browser versions) to achieve this. 2. Identify page request per tab(uniquely) which help server to interprit the request as unique request for new tab even though it is for same record. In fact there are many ways we can achieve this in Asp.NET.

2.1 First Solution. The Simpler Solution: You can change config settings of Asp.NET site as following.

<configuration>
  <system.web>
      <sessionState mode="InProc" cookieless="UseUri"
          </sessionState>
  </system.web>
</configuration>

or

<configuration>
  <system.web>
    <sessionState cookieless="true"
      regenerateExpiredSessionId="true" />
  </system.web>
</configuration>

As you show, the value “UseUri” of cookieless attribute with sessionstate tag is set. This indicate to use cookieless session and in particular embed session identifying code into the URI. So each tab you open contains unique code for identifying the request as unique request in URI itself. The unique code is appended before the page name.

i.e. http://www.abc.com/SampleWebSite/(S(afdg3ires1ik0lmjm3pkjtzl))/Home.aspx

The only cons of this solution is that the URI is then distorted with some unique code. So user can not use it for bookmarking or promoting site. It is not generating bookmark friendly.

2.2 Second Solution. Manually generate unique page identification code and insert it into hidden field on every page.

<asp:HiddenField ID="PageID" runat="server" />

In the form load include following code. It will generate unique page identification code based on millisecond and other time component which always be unique for your site.

If Not IsPostaback Then
  'Generate a new PageiD'
  Dim R As New Random(DateTime.Now.Millisecond +
         DateTime.Now.Second * 1000 +
         DateTime.Now.Minute * 60000 +
         DateTime.Now.Minute * 3600000)
  PageID.Value = R.Next()
End If

So by this method you can identify each tab request as unique requests. But it has following two disadvantages.

First: The access of hidden element PageID is only when ViewState is restored on postback. So you cannot access PageID in page_init(). Second: As hidden field is accessible to the visitor, anyone can change PageID. So this solution will work only for environment with 100% trust ratio of all user.

2.3 Third Solution. Using Javascript assign a unique id like a guid to the browser window / tab by assigning the guid value to the window.name property. window.name property is unique to each browser window/tab and won’t be shared across the windows. Using the guid as the key, read and write data to your ASP.NET session via a webservice. Since javascript does not have access to asp.net session, you will need to use a webservice and call it’s method through javascript. The data can be transfered between javascript and webservice via JSON.

Conclusion: Even though it is feature of most browsers to share session between the tabs, there are some situations which requires to stop sharing session across multiple tab. Here in this article I have shared some tricks you can use to overcome this bottleneck. You can also share your solutions with me.

References: http://forums.asp.net/t/1098023.aspx/1 http://stackoverflow.com/questions/2840615/asp-net-session-multiple-browser-tabs-different-sessions http://msdn.microsoft.com/en-us/library/ms178581.aspx http://geekswithblogs.net/ranganh/archive/2009/04/17/asp.net-session-state-shared-between-ie-tabs-and-ie8.aspx http://www.codeproject.com/Answers/148538/Session-Sharing-in-multiple-tabs-in-IE-in-Asp-net#answer3 https://sites.google.com/site/sarittechworld/track-client-windows http://stackoverflow.com/questions/2829228/way-around-asp-net-session-being-shared-across-multiple-tab-windows

[转]Stop Sharing Session State between Multiple Tabs of Browser的更多相关文章

  1. ASP.NET MVC之Session State性能问题(七)

    前言 这一节翻译一篇有关Session State性能问题的文章,非一字一句翻译. 话题 不知道我们在真实环境中是否用到了Session State特性,它主要用来当在同一浏览器发出多个请求时来存储数 ...

  2. Unable to make the session state request to the session state server处理

    Server Error in '/' Application. Unable to make the session state request to the session state serve ...

  3. 在IIS上发布项目后浏览时报的错:Unable to make the session state request to the session state server

    错误描述: Unable to make the session state request to the session state server. Please ensure that the A ...

  4. Session State Pattern会话状态模式

    Client Session State 客户会话状态. 在Client端保存会话状态. 运行机制 Client在每次请求时会把所有的会话数据传给Server,Server在响应时把所有的会话状态传给 ...

  5. Unable to make the session state request to the session state server处理方法

    Server Error in '/' Application. Unable to make the session state request to the session state serve ...

  6. 关于ASP.NET Session State Server

    最近公司开发的一个网站因为访问量增大,需要添加多台Web Server来进行负载均衡. 但是在做负载均衡前需要将一些原来固定存储在单台机器上的东西分离出来,使之能单独存在在一个独立的机器上,其中就有S ...

  7. MVC之Session State性能

    ASP.NET MVC之Session State性能问题(七)   前言 这一节翻译一篇有关Session State性能问题的文章,非一字一句翻译. 话题 不知道我们在真实环境中是否用到了Sess ...

  8. 转: 解决【Unable to make the session state request to the session state server】

    错误描述: Unable to make the session state request to the session state server. Please ensure that the A ...

  9. what is diff. b/w app state & session state

    Application state is a data repository available to all classes in an ASP.NET application. Applicati ...

随机推荐

  1. 清除浮动类的css

    .clearfix:after{ content:; visibility:hidden; display:block; clear:both;} .clearfix{ zoom:;}

  2. 25个有用的和方便的 WordPress 速查手册

    如果你是 WordPress 开发人员,下载一些方便的 WordPress 备忘单可以在你需要的时候快速查找.下面这个列表,我们已经列出了25个有用的和方便的 WordPress 速查手册,赶紧收藏吧 ...

  3. Hexo - 快速,轻量,强大的 Node.js 博客框架

    Hexo 是一个快速,轻量,强大的 Node.js 博客框架.带给你难以置信的编译速度,瞬间生成静态文件:支持 Markdown,甚至可以在 Hexo 中集合 Octopress 插件:只需要一个命令 ...

  4. CSS常用标签

    CSS常用标签 一 CSS文字属性 color : #999999; /*文字颜色*/ font-family : 宋体,sans-serif; /*文字字体*/ font-size : 9pt; / ...

  5. 用纯CSS创建一个三角形

    原理:把上.左.右三条边隐藏掉(颜色设为 transparent) #demo { width:; height:; border-width: 20px; border-style: solid; ...

  6. “破解大牛是怎么炼成的”之壳与ESP定律

    文章难易度:★★★ 文章阅读点/知识点:逆向破解 文章作者:Sp4ce 文章来源:i春秋   关键字:网络 信息安全技术 本文参与i春秋社区原创文章奖励计划,未经许可禁止转载! 一.前言 通过前面几篇 ...

  7. 让结构体类型frame的某个属性可以直接修改

    本篇是是本人在博客园写的第一篇博客,前几天因为种种原因最终决定离开混了几年的csdn.希望在博客园有个新的开始 Foundation框架里面的frame是大家最熟悉不过的一个属性了,但是修改起来比较麻 ...

  8. 搭建一个完整的Android工程(一)Dagger2

    写在前面 现在越来越多的使用到了开源项目,但是仅限于使用,却不了解,更谈不上深入.也是因为越来越多的开源项目,平时工作中遇到问题也是第一时间寻找对应的开源项目,少了许多独立的思考.现在虽然能很轻松的完 ...

  9. 【代码笔记】iOS-UIScrollerView里有两个tableView

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  10. ios git 终端提交

    git status    //检查提交状态 git status On branch master  //检查分支 git branch   //查看分支 git add *   //添加所有本地更 ...