2011-03-19 1 views
3

Можно ли использовать смешанные cookieless сессии с сессиями cookie?asp.net можете ли вы смешивать cookieless с сессией cookie для хранения данных сеанса?

У меня есть приложение, которое захватывает детали пользователя, а затем перенаправляет на платеж на страницу ssl. Мне было интересно, возможно ли это?

http://www.mydomain.com/confirm.aspx

перенаправляет к

https://www.mydomain.com/(S(za1tw2l2k02jer4fiskzlovd))/payment.aspx

Примечание: идентификатор сеанса, в последнем URL.

Итак, мы используем стандартную сессию cookie для большинства приложений, но когда мы переходим на страницу ssl, мы передаем SessionId на url https, чтобы забрать сеанс. Я пробовал это локально, но он запускает новый сеанс.

Я пропустил трюк?

Благодаря

ответ

2

Я нашел решение, которое, кажется, работает

Когда перенося между HTTP и HTTPS я уже следующее:

Как вы можете видеть, я прохожу сеанс id вручную на страницу https.

protected void btnPurchase_Click(object sender, EventArgs e) 
{ 
     // Confirm puchase code ** 

     string sslPaymentPath = string.Format("https://{0}/payment.aspx?sid={1}", Request.Url.DnsSafeHost, Session.SessionID); 

     Response.Redirect(sslPaymentPath); 

} 

Достигнув страницу Ssl, asp.net видит запрос как новый сеанс, поэтому я использую метод Start_Session в global.asax отказаться от вновь созданную сессии и добавить новые кук сессии с сессией id из строки запроса. Поскольку AquireSessionState, который заполняет пару keyValue сеанса, уже был запущен этой точкой, мне нужно перенаправить страницу назад к себе, чтобы повторно заполнить эти значения.

Это, кажется, работает очень хорошо :)

void Session_Start(object sender, EventArgs e) 
    { 
     bool isPaymentPage = (Request.Path.ToLower().IndexOf("payment.aspx") != -1); 

     // Code to load session over ssl. When changing between two sessions 
     if (isPaymentPage && Request.QueryString["sid"] != null && Request.IsSecureConnection) 
     { 
      string passedSessionId = Request.QueryString["sid"]; 
      Session.Abandon(); 
      Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", passedSessionId)); 
      Response.Redirect(Request.Url.LocalPath, true); 
     } 
    } 

Также в отношении кого-то нажав на внешней ссылке во время просмотра страницы SSL purchase.aspx Я написал следующее в global.asax для перенаправления трафика вернуться к стандартным страницам ssl, если это не страница оплаты.

void Application_BeginRequest(object sender, EventArgs e) 
    { 
     bool isPaymentPage = (Request.Path.ToLower().IndexOf("payment.aspx") != -1); 

     // In the case someone has navigated away from the payment page redirect them back to the none secure protocol. 
     if (!isPaymentPage && Request.IsSecureConnection) 
     { 
      bool isAxdResource = (Request.Path.ToLower().IndexOf(".axd") != -1); 

      if (!isAxdResource) 
      { 
       string url = Request.Url.AbsoluteUri.ToLower().Replace("https://", "http://"); 
       Response.Redirect(url,true); 
      } 
     } 
    } 

Надеюсь, что кто-то посчитает это полезным, я застрял, пытаясь придумать хорошее решение.

Мое вдохновение исходило от this url.

+0

Я не проводил никаких реальных испытаний, но разве это не делает тривиальным «захват» сеанса (проверка строки запроса)? Кроме того, был ли исходный вопрос о том, что раздел https находится в другом домене (что требует обходного пути)? – EdSF

+1

Исходный вопрос связан с переключением сеанса между ssl и http, http и https обрабатывается отдельно сервером, поэтому браузер должен начать новый сеанс при переключении на ssl. Это просто работа, чтобы отыскать существующую сессию пользователей. Я думаю, вы могли бы захватить сеанс пользователей, но вам нужно будет получить идентификатор сеанса пользователей. У вас есть путь к риску/удобству. Сайт, на котором я использовал это, не требовал от пользователя входа в систему или предоставления какой-либо конфиденциальной информации, поэтому соображения безопасности были минимальными. – Mantisimo

 Смежные вопросы

  • Нет связанных вопросов^_^