В JDK1.8 вы можете использовать агрегированные операции и выражение лямбда:
String[] strArray = new String[] {"John", "Mary", "Bob"};
// #1
Arrays.asList(strArray).stream().forEach(s -> System.out.println(s));
// #2
Stream.of(strArray).forEach(System.out::println);
// #3
Arrays.stream(strArray).forEach(System.out::println);
/* output:
John
Mary
Bob
*/
Вы не можете восстановить идентификатор сеанса как таковой, но вы можете, конечно, восстановить часть предсказуемой части состояния сеанса. Если вы используете проверку подлинности с помощью форм, просто прочитайте файл cookie forms-auth в файле global.asax
session start
и повторно заселите объекты сеанса.
Вы можете управлять истечением срока действия cookie-файлов для проверки подлинности форм, создавая постоянный файл cookie с помощью:
FormsAuthentication.SetAuthCookie(userName, true)
В качестве альтернативы вы можете точно настроить истечение, вручную изменив файл cookie:
Dim authCookie As HttpCookie = FormsAuthentication.GetAuthCookie(userName)
Dim authTicket As FormsAuthenticationTicket = FormsAuthentication.Decrypt(authCookie.Value)
Dim newAuthTicket As New FormsAuthenticationTicket(authTicket.Version, authTicket.Name, authTicket.IssueDate, expireDate, authTicket.IsPersistent, userData)
authCookie.Value = FormsAuthentication.Encrypt(newAuthTicket)
authCookie.Expires = newAuthTicket.Expiration
HttpContext.Current.Response.Cookies.Set(authCookie)
Где expireDate
указывает, когда файл cookie должен истекают.
Теперь в global.asax
session start
вы можете проверить, не будет ли возвращаемый пользователь еще аутентифицирован (в силу установленного ранее сохраненного файла cookie):
If HttpContext.Current.User.Identity.IsAuthenticated Then
' Here re-populate the predictable part of session state
' Like user profile etc.
End If
Добавлено после получения информации о Op:
Аутентификация форм не используется, и цель состоит в том, чтобы иметь возможность просто восстановить предыдущий сеанс.
В таком случае единственным вариантом является сохранение существующего сеанса с помощью постоянного файла cookie , так что вы можете получить его позже. Для этого есть некоторые обходные пути. Один из обходных путей объясняется здесь автором этого блога:
Что здесь происходит, так это то, что мы перехватываем два события в global.asax
:
PostRequestHandlerExecute
: (Происходит, когда Обработчик событий ASP.NET завершает выполнение). В этом обработчике мы создаем новый файл cookie (например, temp ), значение которого присваивается значению текущего SessionId. Мы делаем это постоянным файлом cookie, устанавливая свойство expires на тайм-аут сеанса. PostMapRequestHandler
: (Происходит, когда ASP.NET сопоставил текущий запрос с соответствующим обработчиком событий). В этом обработчике мы проверяем возвращающего пользователя, проверив наличие файла cookie « temp ». Если найдено, мы обновляем фактический файл cookie сеанса (ASP.NET_SessionId
) со значением нашего файла cookie temp "; тем самым эффективно восстанавливая предыдущую сессию. Обратите внимание, что это всего лишь обходной путь. Система предназначена для создания нового сеанса. Все, что мы делаем, состоит в том, чтобы использовать несколько крючков для обхода этого, сохраняя существующий сеанс, чтобы получить его позже. Все значения безопасности стоят.
По крайней мере вы можете получить информацию о сеансе. Это можно сделать легко, если вы установите «Режим» на «SqlServer».
Вы можете запросить базу данных (ASPState) & amp; отсюда следует таблица (ASPStateTempSessions), в которой вы сохраняете свои сеансы. [Я использовал постоянное хранилище: -sstype p]
SELECT TOP 5 [SessionId]
,[Created]
,[Expires]
,[LockDate]
,[LockDateLocal]
,[LockCookie]
,[Timeout]
,[Locked]
,[SessionItemShort]
,[SessionItemLong]
,[Flags]
FROM [ASPState].[dbo].[ASPStateTempSessions]
Даже если вы знаете свой идентификатор сеанса, вы можете использовать его для восстановления предыдущего сеанса. Asp.Net создаст новый SessionID, когда вы сделаете новый запрос.