WebMatrixを使用していて、Webサイトにログインシステムを適用しています。私は奇妙な問題に直面しています。私のウェブサイトはランダムにユーザーをログアウトし続けます。思いがけないことが起こります。私のコードだけでなく、WebMatrixサンプルプロジェクトでも発生します。
私のWeb.Configファイルは次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appSettings>
<add key="loginUrl" value="~/login" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<sessionState timeout="20" />
<!-- This is for links with incorrect file extensions -->
<!-- This only handles .NET based errors, not classic web like HTML or ASP based extensions -->
<customErrors mode="Off">
<error statusCode="403" redirect="/Shared/Error404.cshtml" />
<error statusCode="404" redirect="/Shared/Error404.cshtml" />
<error statusCode="500" redirect="/Shared/Error500.cshtml" />
</customErrors>
</system.web>
<system.webServer>
<!-- This handles all other types of link errors -->
<httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" path="/Shared/Error404.cshtml" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0" />
<add invariant="System.Data.SqlServerCe.4.0" name="Microsoft® SQL Server® Compact 4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
</system.data>
</configuration>
セッションタイムアウトを20分と定義しました。私はユーザーにログインするのと同じ単純な方法を使用します。
if (WebSecurity.Login(email, password, rememberMe)) {
Context.RedirectLocal(returnUrl);
return;
} else {
ModelState.AddFormError("The user name or password provided is incorrect.");
}
これが、ユーザーがセキュリティで保護されたページにサインインしているかどうかを確認する方法です。
if (!WebSecurity.IsAuthenticated) {
Response.Redirect("~/login", true);
}
グーグルで少し検索しましたが、WebMatrixWebSecurityがランダムにユーザーをログアウトすることについても不満を言っている人はほとんどいません。フォームの送信や単純なURLクリックなどのアクティビティが実行される場合があります。
何かアイデアや提案はありますか?誰かが私にRazorをダンプしてMVCに移行するように提案したことさえありますが、この問題はありません。それが本当かどうかはわかりません。
アップデート
すべての保護されたページ(ユーザーがログインしている必要があります)の上部に次のコードがあります。これが問題の原因になると誰かが思いますか?
// Ensure this page is not cached
Response.Expires = -1;
Response.Cache.SetNoServerCaching();
Response.Cache.SetAllowResponseInBrowserHistory(false);
Response.CacheControl = "no-cache";
Response.Cache.SetNoStore();
ありがとう-FarazAzhar