2011-10-06 2 views
0

J'ai un champ de recherche sur la page (résultats alimentés par le Web) et je voudrais enregistrer les termes de recherche pour l'utilisateur dans une liste UL \ LI sur la page. Donc, la prochaine fois qu'ils reviennent sur la page, les résultats sont toujours là ... mais s'ils effacent leur cache, ils sont réinitialisés.Meilleure façon de conserver les données localement pour un utilisateur sur une page Web?

Quelle est la meilleure façon d'y parvenir? ... Je peux persister entre les publications facilement, mais c'est une nouvelle pour moi.

Merci, Steve

Répondre

1

probablement utiliser un cookie, mais rappelez-vous que vous êtes limité à 4 Ko de données.

Sinon, stockez la session dans une base de données. Enregistrez ensuite cet ID d'enregistrement dans un cookie. De cette façon, vous pouvez charger les données de la base de données en fonction de l'ID du cookie. Puis vider toutes les entrées dans la DB plus que disons, 30 jours ou quelque chose.

0

En raison du manque de sommeil, je vous ai donné une réponse en PHP. Désolé à ce sujet, je vais le laisser parce que l'information est toujours correcte, juste la syntaxe sera légèrement différente dans asp.net

Vous avez deux options pour la persistance des données en php; cookies et sessions.

Les sessions sont côté serveur et durent tant que la fenêtre du navigateur reste ouverte.

Les cookies sont côté client, et durent jusqu'à ce que l'utilisateur efface son cache.

Donc, il semble que vous vouliez une option cookie. Donc, dans votre processeur de requête de recherche, ajoutez la ligne

setcookie('search_' . time(), $_POST['search_query'], (time() + 10368000)); 

Cela va créer un cookie sur la machine cliente, avec le nom search_xxxx où xxxx est un horodatage (chaque cookie doit avoir un nom unique sinon ils remplaceront eachother).

Le calcul bizarre à la fin est un temps d'expiration, qui est fixé à 120 jours dans le futur. Ensuite, dans votre document PHP qui affiche votre page de recherche, vous devez cracher toutes ces valeurs de cookies.

foreach($_COOKIES as $k => $v) { 
    if(substr($k, 0, 7) == 'search_') echo($v . '<br />'); 
} 

Ceci crachera chacun des termes de recherche trouvés sur la machine du client. L'instruction if est de s'assurer qu'elle n'affiche que les cookies de termes de recherche, et pas d'autres.

0

Utilisez un cookie. En supposant que vous commencez avec un List<string> de termes de recherche appelés terms, faites:

var sb = new StringBuilder(); 
foreach (var t in terms) sb.Append(t).Append(";") 
var c = new HttpCookie("terms"); 
c.Value = sb.ToString().TrimEnd(';'); 
c.Expires = DateTime.Now.AddDays(30); 
Response.Cookies.Add(aCookie); 

Ensuite, lorsque vous avez besoin d'accéder à ces termes à nouveau (à DataBind à un répéteur, ou d'un processus d'une autre manière à afficher sur votre page):

if (Request.Cookies["terms"] != null) { 
    var terms = new List<string>(); 
    foreach (var t in Request.Cookies["terms"].Value.Split(';')) list.Add(t); 
} 
0

A Cookie est probablement votre solution pour aujourd'hui, mais HTML5 localStorage finira par être le meilleur pari. Seulement pris en charge par les versions de navigateur modernes en ce moment, dépend de vos utilisateurs.

Questions connexes