[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. |