2

時間を割いて私の質問を読んでくれてありがとう。別のユーザーのプロフィールページにアクセスする可能性のあるサイトへの訪問者がいます。その後、サイトにログインするか、現在メンバーでない場合は新規登録することをお勧めします。これらのアクションにより、最初のページ/ URLからかなり離れた場所に移動しますが、ログイン/サインアップが完了した後、開始位置を「追跡」することで、そのページに「ジャンプ」できるようにしたいと考えています。(注:重要な場合は、標準のMicrosoftメンバーシッププロバイダークラスを使用しています。)「ジャンプバック」の部分は簡単に思えますが、問題となるのは「追跡」の部分です。

イラスト/例:

訪問者は、次をクリックした後にサイトに到着します:www.mysite.com/profiles/ID=108

次に、訪問者はそのページを離れてログインします。(ログインした)ユーザーがそのプロファイルページに戻るための適切なオプションがあるように、どうすればID = 108を最適にキャプチャできますか?クッキーは最適ではないことを読んで理解しましたが、他のオプションのいくつかは、ユーザーがまだログインしていないなどの理由で、モンキーレンチを私の考えに投げ込んでいるようです。

最良のMVC3の方法でこれに対処するために私が取ることができる具体的なステップはありますか?

編集:

    public ViewResult MyProfile(int? id)
    { 
    HttpCookie cookie = new HttpCookie("MySiteCookie");
    cookie.Value = id.ToString();
    cookie.Expires = DateTime.Now.AddYears(1); //or whatever time is appropriate
    System.Web.HttpContext.Current.Response.Cookies.Add(cookie);

    //do some other stuff
    }

もう一方の端では、Cookieを利用するために、次のように(一時的に)メニューに追加しました。

    var MyProfileId = "";
    if (Request.Cookies["MySiteCookie"] != null)
    {HttpCookie cookie = request.Cookies["MySiteCookie"];
    MyProfileId = Server.HtmlEncode(cookie.Value);}

それからあなたはそれをあなたのリンクに入れます

4

3 に答える 3

3

いくつかのオプションがあります。

1)コントローラーでSessionを使用して、値を保存できます。

Session.Remove("ID");
Session.Add("ID", "108")

そして、呼び出されたコントローラーで取得します。

ID = Session["ID"];

2)ログインコントローラからクエリ文字列にID=108を渡すことができます。

return RedirectToAction("Edit", "Profile", new { ID = "108" });
于 2012-05-08T19:15:54.063 に答える
2

私はクッキーが最適ではないことを読んで理解しています

IMHOクッキーは、これに取り組むための最良の方法です。匿名ユーザーがプロファイルページにアクセスすると、id現在表示しているプロファイルのCookieを含むCookieを送信するだけです。その後、彼が正常にログインしたときに、このCookie値を読み取って、リダイレクトリンクを取得しidて構築し、このリンクにリダイレクトします。

もう1つの可能性は、サーバー側のセッションを使用することですが、これはCookieの代わりとしてのみ言及しており、私が推奨するものとしてはまったく言及していません。

于 2012-05-08T19:13:49.490 に答える
1

クエリ文字列パラメータにURLを追加して、ログインアクションにリダイレクトできます。

言ってみましょう: www.mysite.com/login?ReturnUrl='www.mysite.com/profiles/ID=108'

これがデフォルトのメンバーシッププロバイダーの動作だと思いますが、ReferrerUrlを取得して独自にクエリ文字列に配置することができます。

于 2012-05-08T19:14:35.813 に答える