Здесь две проблемы:
Во-первых, почему вы храните пароль пользователя в виде обычного текста в файле cookie? Это крайне небезопасно! Это настолько фундаментально небезопасно, что у вас также может не быть паролей. Есть много способов справиться с этим. Вот один простой пример:
Если вы хотите, чтобы сайт «запомнил» пароль пользователя, сгенерируйте уникальный токен (например, GUID) и сохраните GUID вместе с информацией об учетной записи на сервере как «активный сеанс», а также сохраните GUID в файле cookie. Когда пользователь посещает сайт, проверьте, существует ли файл cookie с маркером, и если да, вы можете сопоставить его с информацией для входа в систему на стороне сервера и полностью обойти страницу входа. Есть еще кое-что, что нужно учитывать, но это основная концепция.
Во-вторых, ваш текущий дизайн требует обратного вызова в стиле AJAX. Код, который вы написали на C #, выполняется на сервере, но события фокусировки / размытия происходят на стороне клиента.
С чисто технической точки зрения вам следует написать JavaScript для обработки всего этого процесса. Функция JS может запускать onblur()
, а JS может читать файлы cookie точно так же, как .NET:
var usernameBox = document.getElementById('usernameBox');
usernameBox.onblur = handleBlur;
function handleBlur() {
var passwordBox = document.getElementById('passwordBox');
passwordBox.value = readCookie(cookieName);
}
function readCookie(cookieName) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return "";
}
(Обратите внимание, что getElementById
использует идентификатор клиента, а не идентификатор ASP.NET)
Проблема с вашей безопасностью - гораздо более серьезная проблема. Нет способа исправить то, что вы пытаетесь достичь; это просто принципиально плохая идея.
16.05.2009