Важно помнить, что с 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')
Какую версию asp.net Вы используете? Это было обсуждено в форум asp.net .
Проблема здесь не действительно связана с ASP.NET, но с объемом информации, который обеспечивается в запросе HTTP браузерами. Дата окончания срока действия была бы недоступна независимо от платформы, которую Вы используете на стороне сервера.
, Поскольку Вы суммировали себя в своем вопросе свойство Expires объекта HttpCookie, который обеспечивается объектом HttpRequest, всегда устанавливается на 01.01.01 12:00. Это вызвано тем, что эта информация об истечении, а также свойства, такие как домен и путь, не передается браузером серверу, когда это отправляет запрос. Единственная информация о куки, которая отправляется, является именем и значением (значениями). Поэтому cookie в запросе будут иметь значения по умолчанию для этих 'недостающих' полей, поскольку они неизвестны на стороне сервера.
я предположил бы, что причина позади этого состоит в том, что истечение, домен и атрибуты пути cookie только предназначаются, чтобы использоваться браузером, когда это принимает решение относительно того, должно ли это передать cookie в запросе или не и что сервер только интересуется именем и значением (значениями).
работа вокруг Вас предложила дублирования времени истечения, поскольку другое значение cookie является способом получить поведение, Вы ищете.
Проблема версии, обсужденная в ссылке, не была полезна. В основном cookie ASP.NET сосет. Я должен был сохранить время даты истечения срока в cookie сам и проверить его в каждый запрос.
Сначала я также разочаровался, почему Request cookie не имеет фактического значения Expires. После отладки http с помощью Fiddler2. Я знаю, что .NET не ошибся, вместо этого протокол http является ответом, почему Request cookies ведут себя так.
Если вы используете Fiddler между вашим приложением и браузером. Вы можете видеть, что ответный cookie-файл отправляется в браузер правильно со всем доменом, путем, сроком действия, безопасным и httponly. Однако следующий файл cookie запроса в заголовке http cookie не имеет значения истечения срока действия, это только имя и значение cookie. Браузер отвечает за отправку этого заголовка запроса, и я считаю, что это связано с протоколом http. Причина в том, что для минимизации размера веб-серверу не нужно его проверять, поскольку они фактически устанавливают все значения. Они должны заметить.
Таким образом, вам не нужно проверять срок действия в веб-запросе, поскольку вы уже знаете дату. Просто, если вы получите cookie обратно, это означает, что срок действия cookie еще не истек. После того, как вы установите срок действия, браузер обработает его. Если вы хотите изменить срок действия, просто установите новое значение в ответе.
CallMeLaNN