Время истечения срока cookie ASP.NET всегда является 01.01.01 12:00

Важно помнить, что с Python , когда выполняются разные биты кода, а также то, что операторы class и def выполняются, когда видели , а не просто храниться позже. С def это немного легче понять, потому что единственное, что выполняется, - это то, что находится между () s, поэтому в вашем коде выше

def __init__( SELF, name = MyClass.__DefaultName ):

, когда Python видит MyClass.__DefaultName it пытается найти его сначала в пространстве имен local, затем в пространстве имен модуля (aka global) и, наконец, в builtins.

Что такое пространство имен local при выполнении функции class заявление? Это интересная часть - это то, что станет пространством имен class, но на данный момент оно анонимно, поэтому вы не можете ссылаться на него по имени (иначе MyClass в вашем коде), но вы можете прямо ссылается на все, что уже определено ... и что было определено? В вашем примере класса только одно - __DefaultName. Поэтому ваш __init__ должен выглядеть так:

def __init__( SELF, name=__DefaultName ):

Помните, что вы не можете изменить MyClass._MyClass__DefaultName позже, и эти изменения появятся в новых экземплярах. Зачем? Поскольку функция __init__ выполняется только один раз, и любое значение __DefaultName было в данный момент сохранено и всегда будет использоваться - если вы не укажете новое значение при создании нового экземпляра:

my_instance = MyClass(name='new name')
28
задан John Sheehan 2 January 2009 в 07:40
поделиться

4 ответа

Какую версию asp.net Вы используете? Это было обсуждено в форум asp.net .

2
ответ дан Gulzar Nazim 14 October 2019 в 10:17
поделиться

Проблема здесь не действительно связана с ASP.NET, но с объемом информации, который обеспечивается в запросе HTTP браузерами. Дата окончания срока действия была бы недоступна независимо от платформы, которую Вы используете на стороне сервера.

, Поскольку Вы суммировали себя в своем вопросе свойство Expires объекта HttpCookie, который обеспечивается объектом HttpRequest, всегда устанавливается на 01.01.01 12:00. Это вызвано тем, что эта информация об истечении, а также свойства, такие как домен и путь, не передается браузером серверу, когда это отправляет запрос. Единственная информация о куки, которая отправляется, является именем и значением (значениями). Поэтому cookie в запросе будут иметь значения по умолчанию для этих 'недостающих' полей, поскольку они неизвестны на стороне сервера.

я предположил бы, что причина позади этого состоит в том, что истечение, домен и атрибуты пути cookie только предназначаются, чтобы использоваться браузером, когда это принимает решение относительно того, должно ли это передать cookie в запросе или не и что сервер только интересуется именем и значением (значениями).

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

61
ответ дан Andy Rose 14 October 2019 в 10:17
поделиться

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

0
ответ дан Shankar 14 October 2019 в 10:17
поделиться

Сначала я также разочаровался, почему Request cookie не имеет фактического значения Expires. После отладки http с помощью Fiddler2. Я знаю, что .NET не ошибся, вместо этого протокол http является ответом, почему Request cookies ведут себя так.

Если вы используете Fiddler между вашим приложением и браузером. Вы можете видеть, что ответный cookie-файл отправляется в браузер правильно со всем доменом, путем, сроком действия, безопасным и httponly. Однако следующий файл cookie запроса в заголовке http cookie не имеет значения истечения срока действия, это только имя и значение cookie. Браузер отвечает за отправку этого заголовка запроса, и я считаю, что это связано с протоколом http. Причина в том, что для минимизации размера веб-серверу не нужно его проверять, поскольку они фактически устанавливают все значения. Они должны заметить.

Таким образом, вам не нужно проверять срок действия в веб-запросе, поскольку вы уже знаете дату. Просто, если вы получите cookie обратно, это означает, что срок действия cookie еще не истек. После того, как вы установите срок действия, браузер обработает его. Если вы хотите изменить срок действия, просто установите новое значение в ответе.

CallMeLaNN

4
ответ дан 28 November 2019 в 02:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: