![]() |
| [Cheyenne] Cookie | |
| trigram | 5-Jul-2011/11:59:35+2:00 |
| La fonction set-cookie n'est pas encore implémentée. Alors, en fouillant rapidement dans les sources de Cheyenne, je me suis dit qu'il serait possible d'utiliser le set-header. Exemple : response/set-header 'Set-Cookie "TEST1=test1; Domain=localhost" response/set-header 'Set-Cookie "TEST2=test2; Domain=localhost" Mais je rencontre pas mal de difficulté à le faire fonctionner. | |
| none | 6-Jul-2011/22:29:14+2:00 |
Voici ma page de test :
<%
response/set-header 'Set-Cookie "TEST1=testCookie1; Expires=Wed, 13-Jan-2021 22:23:01 GMT; HttpOnly"
response/set-header 'Set-Cookie "TEST2=testCookie2; Expires=Wed, 13-Jan-2021 22:23:01 GMT; HttpOnly"
%>
<html>
<head>
<title>Cheyenne Cookie test page</title>
<script language="Javascript">
function readCookie(name) {
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 null;
}
</script>
</head>
<body>
Try to set 2 cookies :
<br/>
TEST1 & TEST2
<br/>
<button onclick="javascript:alert(readCookie('TEST1'));">Show Cookie1</button>
<br/>
<button onclick="javascript:alert(readCookie('TEST2'));">Show Cookie2</button>
<br/>
<br/>
Headers content :
<UL><%
foreach [name value] request/headers [
print [<LI><B> name ":"</B> mold value </LI>]
]
%></UL>
</body>
</html>
C'est peut-être moi qui m'y prend mal... | |
| trigram | 6-Jul-2011/23:00:35+2:00 |
| Vu avec DocKimbel : première erreur, le HttpOnly empêche de lire le cookie depuis le code Javascript. Il suffit donc d'enlever le HttpOnly pour que le bouton fonctionne. Deuxième erreur, via le response/set-header 'Set-Cookie il ne prend qu'un cookie (le dernier). | |
| trigram | 7-Jul-2011/0:04:57+2:00 |
| Il faut donc implémenter la fonction set-cookie au niveau de response pour pouvoir gérer plusieurs cookie. | |
| trigram | 7-Jul-2011/15:25:09+2:00 |
| En fait, il suffit de faire : <% response/set-header 'Set-Cookie "TEST1=testCookie1; Expires=Wed, 13-Jan-2021 22:23:01 GMT" response/set-header/add 'Set-Cookie "TEST2=testCookie2; Expires=Wed, 13-Jan-2021 22:23:01 GMT" %> On peut mettre 2 cookies ! Cool. Je suis en train de préparer une contribution pour Cheyenne. Mais je n'arrive pas à faire fonctionner Cheyenne à partir des sources depuis ma machine sous Windows 7. Ca m'éééénnnnnneeeerrrrvvvveeeee.... | |
| trigram | 7-Jul-2011/17:47:42+2:00 |
| Nouvelle page de test pour les cookie : %test-cookie.rsp
<%
include %cookie.rsp
%>
<html>
<head>
<title>[TEST] Cheyenne Cookie</title>
<style>
body {font-family:verdana, arial, Helvetica, sans-serif; font-size:11px; margin:25px; background:#fff repeat-x}
</style>
<script language="Javascript">
function readCookie(name) {
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 null;
}
</script>
</head>
<body>
<b style="font-family:verdana, arial, Helvetica, sans-serif; font-size:12px;">Unit Test Page for Cookie</b>
<br/>
<br/>
request/headers content :
<ul>
<%
foreach [name value] request/headers [
print [<LI><B> name ":"</B> mold value </LI>]
]
%>
</ul>
<br/>
request/content content :
<ul>
<%
foreach [name value] request/content [
print [<LI><B> name ":"</B> mold value </LI>]
]
%>
</ul>
<br/>
Result of Cheyenne :
<br/>
<%
cook: select request/content 'cookieTXT
act: select request/content 'actionCookie
switch act [
"setCookie" [emit join "Setting cookie " cook set-cookie cook]
"getCookie" [coo: get-cookie cook emit rejoin ["Getting cookie " cook " = " coo]]
"removeCookie" [emit join "Removing cookie " cook remove-cookie cook]
]
%>
<br/>
<br/>
Exemple of cookie: "TEST1=testCookie1; Expires=Wed, 13-Jan-2021 22:23:01 GMT"
<br/>
<br/>
<table border="0" style="font-family:verdana, arial, Helvetica, sans-serif; font-size:11px;">
<form method="POST" action="test-cookie.rsp">
<tr><td>Cookie value</td><td><input type="TEXT" name="cookieTXT"></td></tr>
<tr><td>Action</td><td>
<select name="actionCookie">
<option value="none"></option>
<option value="setCookie">Set Cookie</option>
<option value="getCookie">Get Cookie</option>
<option value="removeCookie">Remove Cookie</option>
</select>
<tr><td> </td><td><input type="SUBMIT" value="Validate"></td></tr>
</form>
</table>
<br/>
Cookie in JavaScript :
<br/>
<br/>
<table border="0" style="font-family:verdana, arial, Helvetica, sans-serif; font-size:11px;">
<tr><td>Cookie's name</td><td><input type="TEXT" name="cookieName"></td></tr>
<tr><td> </td><td><button name="readCookie" onclick="javascript:alert(readCookie(document.getElementsByName('cookieName')[0].value));">Read coookie in JS</button></td></tr>
</table>
</body>
</html>
et le fichier %cookie.rsp :
<%
set-cookie: func [value [string!]] [
response/set-header/add 'Set-Cookie value
]
get-cookie: func [value [string!] /local pos cookie-value end-cookie] [
cookie-value: none
if not none? pos: select request/headers 'Cookie [
end-cookie: [some ";" | end]
parse/all pos [any [thru value [any #" "] "=" copy cookie-value to end]]
if none? cookie-value [
parse/all pos [any [thru value [any #" "] "=" copy cookie-value to ";"]]
]
]
cookie-value
]
remove-cookie: func [value [string!] /local cookie] [
if not none? cookie: get-cookie value [
set-cookie rejoin [value "=; Expires=Mon, 1-Jan-1999 00:01:00 GMT"]
]
]
%>
| |
|
Login required to Post. | |