1. 程式人生 > >終於解決了session問題,總結!

終於解決了session問題,總結!

         web應用程式的狀態管理,我覺得真是比較頭疼的一個問題,或許是沒有去深入的瞭解過, 在解決的方式上走了很多的彎路。還好,問題算是基本解決了~~~

        問題描述:在該web應用程式中,各個頁面需要傳遞一些引數,所有的引數我都是通過session進行傳遞(或許儲存在session裡面並不是件好事),同時有些頁面是可以在新的視窗中開啟,因此當用戶離開或則關閉所有視窗的時候,session應該立即執行釋放操作。但一般在所有視窗關閉的時候,會話並不會立即結束,也只有到了timeout的超時時間才自動結束,那麼在當前session會話未超時之前,其中儲存的引數就會浪費掉伺服器上的記憶體資源。如果直接在關閉一個視窗的時候就進行釋放操作,結果將導致在其他視窗中儲存的相關引數丟失,因此產生訪問錯誤。

        解決方式:

                1.在伺服器上使用session["WindowCount"]來儲存客戶端的視窗數量,在session_OnStart事件中,將該植初始話為0 (session["WindowCount"] = 0 );

                2.建立兩個aspx檔案,分別用於客戶端視窗的計數操作,分別為IncWindowCount.aspx和DecWindowCount.aspx;

                3.在IncWindowCount.aspx的page_Load事件中寫入如下程式碼用於增加客戶端視窗的數量,該檔案將會在客戶端的onLoad事件中載入執行,程式碼:

                Session["WindowCount"] = (Int)Session["WindowCount"] + 1; //客戶端視窗數量加一

                4.在DecWindowCount.aspx的page_Load事件中寫入如下程式碼用於減少客戶端視窗的數量,該檔案將會在客戶端的onUnLoad事件中載入執行,程式碼:

                Session["WindowCount"] = (Int)Session["WindowCount"] - 1; //客戶端視窗數量減一

                if ((Int)Session["WindowCount"]  == 0)

               {

                       Session.Abandon(); //說明客戶端視窗已經全部關閉,結束當前會話

                }                

                5. 在其他頁面的window.onload和onunload中加入如下語句(如果有框架,就在框架頁中的window.onload和onunload中寫入):

   function window_onload() {
  if ((window.name == "") || (window.name != "WindowName"))
  {
      //當window.name == ""或則window.name != "WindowName"說明客戶端打開了一個新的視窗;
      //就執行伺服器上的IncWindowCount.aspx檔案使視窗數量加一;
      window.name = "WindowName";
      RunServerCode("IncWindowCount.aspx");
  }
}

function window_onunload() {
    if ((window.screenTop > 10000) && (window.screenLeft > 10000))
    {
        //說明當前視窗已經被關閉;
        //執行伺服器上的DecWindowCount.aspx檔案使視窗數量減一;
        RunServerCode("DecWindowCount.aspx");
    }
}


function RunServerCode(addr)
{
    var xmlhttp;
    try
    {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e)
    {
        try
        {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e)
        {
            try
            {
                xmlhttp = new XMLHttpRequest();
            }
            catch(e)
            {
            }
        }
    }
   
   
    if (xmlhttp != null)
    {
        xmlhttp.open("GET", addr, true);
        xmlhttp.send(null);
    }
}

                6. 實際上在整個執行流程中,瀏覽器在第一次開啟時,就會使視窗數量加一,在關閉的時候使數量減一,如果視窗數為零就結束整個會話,這樣就不用等到超時的時候才結束;

                總結:該方式還存在一些問題,就是當用戶直接在位址列中輸入其他網站地址的時候,是不會進行相關處理的;用於視窗計數的檔案也可以合併在一個檔案當中;如果能夠直接取得開啟當前web應用程式的視窗數,實現將會更加容易。如果有更好的方式,我會虛心接受,呵呵~~~~其它~~~~~~

                本人初學,許多知識尚未了解、其中也在網上查找了一些相關資料,因此可能有一些東西顯得比較淺顯。

                ----------good good study, day day up---------

相關推薦

終於解決session問題總結

         web應用程式的狀態管理,我覺得真是比較頭疼的一個問題,或許是沒有去深入的瞭解過, 在解決的方式上走了很多的彎路。還好,問題算是基本解決了~~~         問題描述:在該web應用程式中,各個頁面需要傳遞一些引數,所有的引數我都是通過session進行

終於解決PADSAltiumORCAD的相互轉換問題

ORCAD-->PADS只用PADS自帶的轉換器,我用過PADS2007,9.1,9.2版本,只能轉換ORCAD10.5版本及以前的版本,最新的ORCAD16.3根本不識別。protel,DXP,Altium designer-->PADS只用PADS自帶的轉換器

終於解決QQ互聯總是系統繁忙請稍後再試的問題。內詳

接觸DZ有一段時間了,但是從來沒用過雲平臺和雲平臺的服務,前幾天才開始研究使用雲平臺才發有現很多棘手的問題。經過幾天的研究終於將QQ互聯的問題解決了,現總結一下discuz X3.3QQ互聯 1.18.2(qqconnect)我以前沒有開通過雲平臺及其雲平臺裡的服務,最近才

excel匯出的功能釋出到伺服器上報錯問題終於解決

使用C#呼叫ET介面(8.1.0版本) Windows7作業系統下,匯出xls檔案時,使用SaveAs有時會失敗,檔案沒有生成,改用SaveCopyAs就成功了,會是什麼原因呢? SaveAs的呼叫:workbook.SaveAs(fileName, ETFileFormat.etExcel12, Type.

UART模擬7816協議開發總結終於成功啦一掃陰霾一篇總結

從上週五到本週一完成了UART模擬7816協議的第一步開發,成功實現了利用MCBSTM32板卡讀寫智慧卡的軟硬體設計。期間遇到了一些困難和問題,有些是自己的粗心造成的,有些是因為對硬體不夠熟悉造成的。    週五的初步硬體電路搭建完成的任務完成的比較一般,但遇到的問題也

安裝pytorch一直提示下面類似的錯誤忙活一晚上後來終於解決 出錯修改 ninja

ERROR conda.core.link:_execute(502): An error occurred while installing package '<unknown>::ninja-1.7.2-0'. PermissionError(13, 'Permission deni

chrome徹底關閉自動升級新方法。強終於解決谷歌自動升級的煩惱。

清空chrome安裝目錄下Update資料夾裡的內容【注:是保留資料夾,但是裡面的內容為空】 我們做法的原理是讓google沒有許可權改這個資料夾【以往各種方法禁用chrome自動升級不成功,它有各種方法來升級谷歌,但一定是用update裡的升級程式來升級的,你可刪除裡面的檔案,但是它會直接

對於Spring對websocket的屬性注入失敗問題困擾我一天最後終於解決

首先匯入包必須的: <!-- https://mvnrepository.com/artifact/org.springframework/spring-websocket --> <dependency> <groupId>

關於“超時時間已到”的問題終於解決

超時時間已到。超時時間已到,但是尚未從池中獲取連線。出現這種情況可能是因為所有池連線均在使用,並且達到了最大池大小。 說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆疊跟蹤資訊,以瞭解有關該錯誤以及程式碼中導致錯誤的出處的詳細資訊。 異常詳細資訊: System.InvalidOperation

資料連線池預設配置帶來的坑testOnBorrow=falsecloes_wait 終於解決

首先說一下自己程式中遇到的問題,前一段新寫了一個專案,主要為方便公司業務切庫做準備,為其他專案提供介面(spring boot 專案<spring boot + mongo data jpa+mybatis>) 首先呢 多資料來源沒有使用spring boot 整合mybatis,開始有過自己

幾天幾夜終於解決

首先亮一下自己遇到的奇葩錯誤:Exception in thread "main" java.lang.IllegalStateException: Transaction already active    at org.hibernate.engine.transacti

昨天開始安裝SDK,出現問題一直不能成功終於解決

使用SDK Manager更新時出現問題Failed to fetch URL https://dl-ssl.google.com/android/repository/repository-6.xml, reason: Connection to https://dl-ssl.google.com re

關於最近一直糾纏我的c3p0-config.xml配置檔案找不到的問題終於解決\(^o^)/

從一開始看官方的文件中的說明,關於配置c3p0連線池,如果要使用xml來配置,需要將xml檔案放在classpath的路徑下。所以我就放好了 結果執行後,等待了很久,最後得到一堆紅色的讓人崩潰的error 心態瞬間崩了,喝了一口 雪碧纖維+ (這不是廣告-_-)冷靜一

【String註解驅動開發】困擾我很久的AOP巢狀呼叫終於解決

## 寫在前面 > 最近在分析Spring原始碼時,在同一個類中寫了巢狀的AOP方法,測試時出現:Spring AOP在同一個類裡自身方法相互呼叫時無法攔截。哎,怎麼辦?還能怎麼辦呢?繼續分析Spring原始碼,解決問題唄。於是乎,有了本文。 > > 專案工程原始碼已經提交到GitHub:

Glide終於解決同時加載webp格式圖片的問題

測試 ide 4.0 api web picasso 問題 net 今天 前端時間,要給項目換個圖片加載的庫,使用Glide 3.7版本進行測試, 發現在快速滑動列表(每個item都會加載一個app的圖標,采用webp格式,即同時加載多個webp格式)的時候,一屏至少有2

郁悶幾天的問題終於解決

ner bsp typealias clas ble work pri fault fresh 嚴重: Exception sending context initialized event to listener instance of class org.springf

ssh: Could not resolve hostname問題終於解決

tool dfs option bsp 錯誤 pan res fix -h 1、如果系統為64位,無法啟動啟動hdfs: ./sbin/start-dfs.sh。並有以下錯誤: sed: -e expression #1, char 6: unknown option t

解決sessioncookie過期後iframe跳轉到登入頁面的問題

當用戶長時間停留在管理介面沒有操作,等到session過期後,進行了操作,那麼只是iframe跳轉到login頁面,這不是我們想要的結果。解決方法:在login頁面加一個邏輯判斷: $(document).ready(function () {       if (wi

皇家貴賓犬淚痕問題終於解決

皇家貴賓犬淚痕問題終於解決了   作為鏟屎官的我們肯定都想狗狗健健康康的陪伴自己,最擔心的就是狗狗生病。淚痕是鏟屎官們常見的一種寵物疾病,很影響寵物的美觀。我也是查閱了無數的資料諮詢了很多專業人士才弄明白寵物淚痕這個問題,下面我就把我知道的寵物知識分享給大家,希望可以幫到家長們哦。   狗狗

困擾我多次的記憶體溢位問題終於解決

viewpager+fragment +多圖 簡直要命,滑動到第10個fragment左右就會記憶體溢位 說是記憶體溢位,其實是記憶體洩漏。圖片載入開源庫有很多,我用的是Glide,Glide會回收圖片釋放記憶體,然而如果該圖片一直被imageview保持引用就會出現無