2011-09-22 5 views
0

почему куки не сохраняются, когда я запускаю следующий сценарий:Почему не сохранились файлы cookie?

window.onload=init; 

function init() { 
var userName=""; 
if(document.cookie != "") { 
    username=document.cookie.split("=")[1]; 
} 

document.getElementById("name_field").value = username; 
document.getElementById("name_field").onblur = setCookie; 
} 

function setCookie() { 
var exprDate = new Date(); 
exprDate.setMonth(exprDate.getMonth() + 6); 

var userName = document.getElementById("name_field").value; 
document.cookie = "username=" + username + ";path=/;expires=" + exprDate.toGMTString(); 
} 

Когда я обновить страницу, text-field пустеет? почему так? HTML

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
<script type="text/javascript" src="writing_cookie.js"> 
</script> 
</head> 

<body> 
<form> 
<label>Enter your name&nbsp;&nbsp;<input type="text" id="name_field" /></label> <br/> 
<input type="submit" value="submit" /> 
</form> 
</body> 
</html> 
+1

'userName' которую ссылаются как' username' дважды - что это? – pimvdb

+0

@ pimvdb No.I исправил это, но ничего не изменилось –

+0

Работает отлично для меня с исправленными проблемами с верхним/нижним регистром. http://jsfiddle.net/hEXKe/ – James

ответ

0

Как @pimvdb говорит, вы смешиваете дело пользователя.

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

Конкретная проблема заключается в том, что вы задаете значение name_field к в имени пользователя SetCookie(), но на следующей строке сохранить имя пользователя в печенье. имя пользователя не инициализировано, поэтому вы сохраняете пустое значение для файла cookie. Это пустое значение, что вы получите от печенья в Init()

Кроме того, в Init() вы объявляете имя пользователя но присвоить значение куки для пользователя. На самом деле это не вызывает проблемы, но это может быть связано с фиксацией.

Edit - Я только что видел ваш ответ @ pimvdb замечания и сделал немного больше исследований:

При чтении куков, вам нужно разделить на «;», а не «=». Затем вы получите массив «username = username», «path = path» и «expires = date». Затем вы бы извлечь имя из первого элемента массива путем поиска «=»

Ваш код расщепляется на «=», которые дали бы массив «имя пользователя», «имя пользователя; пути», " /; истекает "и" дата ".

Я бы предположил, что он что-то поместил в текстовое поле с вашим кодом (после того, как вы исправили проблему с корпусом).

(См.страница here)

+0

Обратите внимание на [Quirksmode - Cookies] (http://www.quirksmode.org/js/cookies.html), а не на w3schools –

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