[英]SQL Server session state in ASP.NET
我有一個托管在共享托管服務器上的網站。 當前,我正在使用進程內會話狀態,但是遇到諸如每次更改代碼(通常在App_Code
注意到)之類的問題,會話中斷並且用戶注銷。 我有一些疑問:
Session
對象訪問Session
還是需要采用通常的數據庫連接方式? 我嘗試使用aspnet_regsql
命令在本地計算機上對其進行配置,並為托管服務器提供了數據庫IP。 它成功完成,但是當我對web.config
文件進行更改時,它不起作用。
這些是我對web.config
更改:
<sessionState
mode="SQLServer"
sqlConnectionString="data source=[DB IP];user id=username;password=password;initial catalog=[db name on production]"
/>
我在這里做錯什么嗎?
檢查會話狀態模式http://msdn.microsoft.com/zh-cn/library/vstudio/ms178586%28v=vs.100%29.aspx
您需要使用“進行中”以外的其他東西。
在共享托管方面-我只擁有Discountasp.net的經驗,並且正在使用sql server會話狀態,沒有任何問題。 它需要另一個數據庫,但是運行良好。
我也猜你必須使用:
allowCustomSqlDatabase="true"
在您的Web配置中,會話的數據庫名稱與默認名稱不同。
檢查此http://msdn.microsoft.com/en-us/library/h6bb9cz9%28v=vs.90%29.aspx
我真的只能回答你的第一個問題:
“1。是否有什么可以幫助我防止在更改代碼時丟失會話?”
令人討厭的是,無能為力。 一旦您“反彈”網站(例如,修改web.config),您將導致所有會話結束,並且由於丟失了刪除登錄數據,每個人都被注銷了。
聽起來您最好將其更改為使用FormsAuthentication(這是MVC.NET代碼,但該代碼對於其他asp.net應用程序仍然有效),因為它在代碼更改之間是穩定的,例如
using System.Web.Security;
public function ActionResult Login(LoginModel model)
{
var password = FormsAuthentication.HashPasswordForStoringInConfigFile(model.Password
+ System.Configuration.ConfigurationManager.AppSettings["salt"].ToString(), "sha1");
if (new UserService().Login(model.EmailAddress, password))
{
FormsAuthentication.RedirectFromLoginPage(model.EmailAddress, true);
}
}
使用FormsAuthentication將意味着您的用戶將被asp.net土地“記住”,並且更改web.config不會殺死他們的登錄會話。
如果您使用此方法,但仍希望在用戶關閉瀏覽器時注銷用戶,則可以在上面登錄時設置一個會話cookie,這是一個標准會話cookie,而不是隨代碼變化而變化的會話變量。 當用戶關閉瀏覽器時,該cookie將被瀏覽器殺死。 Cookie可以很簡單,例如“ loggedIn:yes”。 該cookie以及對FormsAuthentication Identity值的檢查,例如
if(!HasLoginCookie() || !System.Web.HttpContext.Current.User.Identity.IsAuthenticated)
{
// redirect user to log in page.
}
然后,如果該Cookie被刪除,則會注銷用戶。 在經過一定時間的不活動之后,FormsAuthentication也將自動注銷,這增加了額外的安全性。 希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.