Могу ли я перенести данные сеанса из одного браузера в другой? - Веб-разработка - PullRequest
0 голосов
/ 05 апреля 2010

Мне нужно перенести пользователя на страницу, для которой требуются данные сеанса, которые хранятся в другом сеансе.

Возможно ли в некоторых случаях перенести данные сеанса, установив файл cookie сеанса в браузере пользователя?

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

Ответы [ 3 ]

1 голос
/ 11 апреля 2010

Возможно ли в некоторых случаях перенести данные сеанса, установив сессионный cookie на пользователя браузер

Конечно, вы можете. Просто установите новый файл cookie и перенаправьте его. Вам придется сделать это на стороне сервера. Установка файла cookie сеанса на стороне клиента будет проблематичной.

const string sessionStateCookieName = "ASP.NET_SessionId";
string sessionId = "some session id";

HttpCookie cookie = new HttpCookie(sessionStateCookieName, sessionId) { Path = "/", HttpOnly = true };
Response.Cookies.Remove(sessionStateCookieName);
Response.Cookies.Add(cookie);

// force a redirect to complete session switch
Response.Redirect(Request.Path);

Вы можете расширить это. Вот рабочий пример страницы .aspx. Чтобы переключать сеансы, просто добавьте URL-параметр 'sessionId'.

<%@ Page Language="C#" AutoEventWireup="true" %>

<script runat="server">
    // this is the method that does the magic
    protected override void OnPreInit(EventArgs e)
    {
        var sessionId = Request["sessionId"];

        if (!string.IsNullOrEmpty(sessionId))
        {

            // this could be found via reflection if different sessionstate cookie name is used in config
            const string sessionStateCookieName = "ASP.NET_SessionId";

            HttpCookie cookie = new HttpCookie(sessionStateCookieName, sessionId) { Path = "/", HttpOnly = true };
            Response.Cookies.Remove(sessionStateCookieName);
            Response.Cookies.Add(cookie);

            // force a redirect to complete session switch
            Response.Redirect(Request.Path);
        }

    }

    // the rest of this script is just demo code 

    protected void Page_Load(object sender, EventArgs e)
    {
        CurrentSessionIdLabel.Text = Session.SessionID;
    }

    protected void SwitchSessionButton_Click(object sender, EventArgs e)
    {
        // this is the session we wish to switch to 
        string switchToSessionId = SessionIdTextBox.Text;
        Response.Redirect(Request.Path + "?sessionId=" + Server.UrlEncode(switchToSessionId));
    }

</script>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="Form1" runat="server">
    <div>
        Current SessionId<br />
        <asp:Label ID="CurrentSessionIdLabel" runat="server"></asp:Label>
        <br />
        <br />
        <asp:Label ID="Label1" runat="server" Text="Desired SessionId"></asp:Label>
        <br />
        <asp:TextBox ID="SessionIdTextBox" runat="server"></asp:TextBox>
        <br />
        <asp:Button ID="SwitchSessionButton" runat="server" Text="Switch Session" OnClick="SwitchSessionButton_Click" />
    </div>
    </form>
</body>
</html>
0 голосов
/ 05 апреля 2010

Если у вас есть механизм входа в систему, вы можете просто связать данные с вошедшим в систему пользователем (в базе данных?) Вместо помещения их в сеанс.

0 голосов
/ 05 апреля 2010

Нет, браузеры не делятся файлами cookie. Хотя, если вы используете сеансы без файлов cookie , это сработает.

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