我將一個令牌存儲在會話變量中。我使用javascript windows.open函數在新的ASPX頁面中啓動需要此令牌的報表。當這個新的頁面加載HttpContext.Current.Session爲空。在最小的SharePoint頁面中的window.open之後的會話null
我已經通過在查詢字符串中傳遞令牌來解決此問題,但此窗口中的活動需要保持父窗口的會話處於活動狀態,我不確定會話對象爲空是否意味着此方案。
任何想法爲什麼HttpContext.Current.Session對象將通過使用window.open從JavaScript?
編輯:我會補充說這是存儲在SharePoint庫中的基本System.Web.UI.Page,並且從webpart調用window.open函數。
我在想這個頁面可能需要從基類繼承來共享正確的上下文。
更新:我已經縮小了這與SharePoint有關。我將訪問Session對象的代碼移到了Web部件中。如果放在標準Web部件頁面中,Web部件工作正常,但我已將其添加到僅包含ScriptManager,SPWebPartManager和WebPartZone的最小頁面。代碼運行,但會話對象再次爲空。我最小的頁面缺少使Session對象可用的東西。
已解決:我最小的ASPX頁面需要實現IRequiresSessionState接口。之後,Session對象就在那裏。
自從他提供了最有用的信息以來,我將給安德烈帶來信譽。
我將此頁面從SharePoint庫移至_layouts目錄並從LayoutsPageBase繼承,但它沒有任何影響。 HttpContext.Current中的HttpSessionState對象爲null。 – webwires 2011-04-05 14:20:50
正如我在我的回答中所提到的,會話cookie不是持久性的,因此它不會在不同的瀏覽器窗口之間共享。您必須將會話標識顯式傳遞到新窗口,無論是作爲您創建的持久性cookie還是作爲url的一部分。沒有其他辦法。 – Andrey 2011-04-05 15:06:04
我們已經在使用持久性cookies。我們的SharePoint網站使用FBA,並且我們要求Office集成的Cookie持久性。我已經能夠驗證這是與SharePoint相關的。我將頁面轉換爲最小的Web部件頁面,並將Session訪問權限移至Web部件。如果Web部件放在標準的Sharepoint Web部件頁面中,它就可以工作。如果我在最小的情況下使用它,它會失敗。我在使會話可用的頁面中丟失了一些東西。 – webwires 2011-04-05 19:20:07