0

セッションを使用せずに、ログインしたユーザーの情報またはエンティティをmvc 3アプリケーションに保存するためのより良い方法はありますか?以前はセッションに保存したいので。しかし、Sessionの概念がないので、それを取得するための最良の方法は何でしょうか?

ユーザーのサンプルエンティティクラスは次のとおりです。

public class User
{
  public UserName { get; set; }
  public Password { get; set; }
  public SecurityGroup { get; set; }
  public DepartmentID { get; set; }
}

SecurityGroupユーザーの必要なページと、必要なページがいくつかありますDepartmentID。必要なときに毎回データを取得するのはばかげています。

私はまだこのテクノロジーを始めているので、あなたの意見を聞く必要があります。

ありがとう!

4

3 に答える 3

1

他のコントローラーが継承するBaseControllerを作成し、ExecuteCore()でSystem.Web.HttpContext.Current.Userを確認して、ViewDataにSecurityGroupを保存することができます。

ViewData("SecurityGroup") = User.SecurityGroup

その後、任意のコントローラーでアクセスできます。

例(VB.NETを許してください)

Public Class BaseController
    Inherits System.Web.Mvc.Controller

    Protected Overrides Sub ExecuteCore()

        Dim currentUser As User = MyDatabaseLayer.GetUserByEmail(User.Identity.Name)

        ViewData("SecurityGroup") = currentUser.SecurityGroup

        MyBase.ExecuteCore()

    End Sub

End Class

次に、標準コントローラーの1つで

Public Class MyController
    Inherits BaseController

    Public Function Index()

        If ViewData("SecurityGroup") = something Then

             'do something

        End If

    End Function

 End Class
于 2012-11-06T10:13:56.127 に答える
1

必要なときに毎回データを取得するのはばかげています。

私はそうは思いません、それはそれがどのように行われるべきかです。これらの値をSessionに保存することを検討している場合は、ユーザーがアプリを閉じたときにセッションを強制終了する方法も用意する必要があります(ここで、「閉じる」はログアウトを意味するのではなく、単にタブ/ブラウザーを閉じた可能性があります)

user.identity.name現在ログインしているユーザーのユーザー名を取得し、必要なときにSecurityGroup/DepartmentIdいつでも取得できます。

于 2012-11-06T12:01:16.503 に答える
1

しかし、Sessionの概念がないので、それを取得するための最良の方法は何でしょうか?

わかりません。もちろん、MVC3にはセッションの概念があります。それはあなたが何をしたいかによると思います、そしてあなたがあなた自身に尋ねる必要があるいくつかの質問があります:

  1. タブを閉じると、ユーザーは自動的にログアウトされますか?
  2. セッションはいつ終了しますか?(例:「ログアウト」を押す、タイムアウト)

私が最も役立つと思う方法は、ASP.NETFormsAuthenticationメカニズムとセッション変数を活用することです。

これが私が書いたコードの例です:

var curUser = context.Session["User"] as ViewUser;

if (curUser == null)
{
   // Generate token from given FB access token
   var token= 'your token';

   // Set the forms authentication auth cookie
   FormsAuthentication.SetAuthCookie(token, false);

   // Get user details to put inside the session vars
   var UserInstance = getUser(token);

   // Put user details in session vars
   context.Session["User"] = UserInstance;
}

トークンはoAuthなどのためのものであり、そのようにしてシステムが構築されました。代わりにユーザーのIDを入力できます。

これでFormsAuthinticationが利用されます。これは、セッションを通じて存続する保護されたCookieもあり、ユーザーモデルをSession変数内に配置したため、トークンで毎回データベースをアドレス指定する必要がないためです。

これにより、フォールバックを実行できます。つまり、次のようになります。

  1. そうでない場合は、セッション変数を解析してみてください
  2. ユーザーがログインしているかどうかを確認し、データベースからユーザーを再度解析します
  3. ユーザーがログインしていない場合-ロジックを実装します。

これは私にとってうまくいきました。それが役に立てば幸い。

于 2012-11-06T13:51:48.283 に答える