Чтение куки в другом приложении в Asp.Net - PullRequest
3 голосов
/ 10 августа 2011

У меня есть приложение в Asp.Net, и одним нажатием кнопки он запускает другое картографическое приложение.В этом приложении требуются учетные данные пользователя, такие как имя пользователя и адрес электронной почты.Итак, я пытался установить cookie и зафиксировать домен cookie для этого приложения, но я не могу увидеть cookie в этом приложении.Я не совсем уверен, что идет не так или я сделал какую-то ошибку в файле cookie.

         MembershipUser usr = Membership.GetUser();
    Guid newUserId = (Guid)usr.ProviderUserKey;
    HttpCookie SampleCookie = new HttpCookie("UserInfo");
    Response.Cookies["UserInfo"]["UserName"] = usr.UserName;
    Response.Cookies["UserInfo"]["Email"] = usr.Email;
    SampleCookie.Expires = DateTime.Now.AddDays(1);
    Response.Cookies.Add(SampleCookie);
    SampleCookie.Domain = "http://157.182.212.204/MAP";

Еще раз спасибо за помощь.

Код для приложения MAP:

          function Get_Cookie( check_name ) {
            // first we'll split this cookie up into name/value pairs
            // note: document.cookie only returns name=value, not the other components

            var a_all_cookies = document.cookie.split( ';' );
            var a_temp_cookie = '';
            var cookie_name = '';
            var cookie_value = '';
            var b_cookie_found = false; // set boolean t/f default f

            for ( i = 0; i < a_all_cookies.length; i++ )
            {
                // now we'll split apart each name=value pair
                a_temp_cookie = a_all_cookies[i].split( '=' );


                // and trim left/right whitespace while we're at it
                cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

                // if the extracted name matches passed check_name
                if ( cookie_name == check_name )
                {
                    b_cookie_found = true;
                    // we need to handle case where cookie has no value but exists (no = sign, that is):
                    if ( a_temp_cookie.length > 1 )
                    {
                        cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
                    }
                    // note that in cases where cookie is initialized but no value, null is returned
                    return cookie_value;
                    break;
                }
                a_temp_cookie = null;
                cookie_name = '';
            }
            if ( !b_cookie_found )
            {
                return null;
            }
        }

        function Delete_Cookie( name, path, domain ) {
            if ( Get_Cookie( name ) ) document.cookie = name + "=" +
                    ( ( path ) ? ";path=" + path : "") +
                    ( ( domain ) ? ";domain=" + domain : "" ) +
                    ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
        }

                    alert(Get_Cookie("UserName"));                                                        

Код для страницы WVWRAPICt RESET.aspx.cs приведен ниже ... Здесь файл cookie устанавливается

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
  public partial class RESET_RESET : System.Web.UI.Page
  {
protected void Page_Load(object sender, EventArgs e)
{
            Menu Nav = Master.FindControl("NavigationMenu1") as Menu;
    MenuItemCollection Menu = Nav.Items;
    foreach (MenuItem item in Menu)
    {
        string name = item.Text.ToString();
        if (name == "ADMIN")
        {
            item.Enabled = User.IsInRole("Administrator");
        }
        if (name == "ICT")
        {
            item.Selected = true;
        }
        else
        {
            item.Selected = false;
        }
    }
}

protected void Button2_Click(object sender, EventArgs e)
{
    MembershipUser usr = Membership.GetUser();
    Guid newUserId = (Guid)usr.ProviderUserKey;
    HttpCookie SampleCookie = new HttpCookie("UserInfo");
    SampleCookie["UserName"] = usr.UserName;
    SampleCookie["Email"] = usr.Email;
    string connectionString =
  ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

    string checkSiteEventIDSQL = "Select * from UserProfiles WHERE UserId='" + newUserId + "'";

    using (SqlConnection myConnection1 = new SqlConnection(connectionString))
    {
        try
        {
            myConnection1.Open();
            SqlCommand myCommand1 = new SqlCommand(checkSiteEventIDSQL, myConnection1);
            SqlDataReader myReader = myCommand1.ExecuteReader();
            if (myReader.HasRows)
            {
                while (myReader.Read())
                {
                    string Agency = (myReader.GetValue(2)).ToString();
                    SampleCookie["Agency"] = Agency;

                }


            }
        }
        catch (Exception ex)
        {

        }
        finally
        {
            myConnection1.Close();
        }
    }
    SampleCookie.Expires = DateTime.Now.AddDays(1);
     SampleCookie.Domain = "157.182.212.204/MAP";
    // SampleCookie.Path = "/MAP";
    Response.Cookies.Add(SampleCookie);

   Response.Redirect("http://157.182.212.204/MAP/index.html");
}
}

1 Ответ

1 голос
/ 10 августа 2011

Что касается проблем с настройкой cookie-файла ... вы не найдете cookie-файл в ответе, если не добавили его в ответ. (И если вы его нашли, вы просто переписываете этот файл cookie через пару строк). Просто отредактируйте cookie-файл, а затем добавьте его в банку. Кроме того, я считаю, что MAP должен быть в свойстве пути куки (не уверен, насколько велика разница). Насколько я знаю, вам не нужен http в домене (опять же, не уверен, достаточно ли умен браузер для обработки).

MembershipUser usr = Membership.GetUser();
    Guid newUserId = (Guid)usr.ProviderUserKey;
    HttpCookie sampleCookie = new HttpCookie("UserInfo");
    sampleCookie["UserName"] = usr.UserName;
    sampleCookie["Email"] = usr.Email;
    sampleCookie.Expires = DateTime.Now.AddDays(1);
    sampleCookie.Domain = "157.182.212.204";
    sampleCookie.Path = "/MAP";
    Response.Cookies.Add(sampleCookie);

Файлы cookie могут быть установлены только для домена, который является «хвостом» текущего полного доменного имени. Таким образом, если ваше текущее полное доменное имя не 157.182.212.204, файл cookie не будет установлен в браузере. Под хвостом, например, я имею в виду, что http://overflow.acme.com может устанавливать cookie для overflow.acme.com или acme.com, но не для fubar.acme.com или fubar.com.

Я предполагаю, что если ваше приложение находится на другом FQDN, чем приложение MAP, вам нужно будет найти другой способ передачи имени пользователя и электронной почты в приложение карты (возможно, опубликовать на странице в приложение карты, которое может установить cookie и затем перенаправить на соответствующую страницу?


Обновите после того, как вы отправите еще немного кода:

Попробуйте это:

   SampleCookie.Domain = "157.182.212.204";
   SampleCookie.Path = "/MAP";
   Response.Cookies.Add(SampleCookie);

   Response.Redirect("http://157.182.212.204/MAP/index.html", false);

Установка false в response.redirect должна привести к прохождению установленных заголовков cookie. Вам может понадобиться замкнуть другую логику на вашей странице, если у вас есть что-нибудь в событиях рендеринга

Или просто передать материал в строке запроса. Вы не используете куки HttpOnly (чтобы пользователь мог использовать куки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...