2011-10-06 66 views
0

我在頁面上有一個搜索框(webservice-fed結果),我想在頁面上的UL \ LI列表中爲用戶保存搜索條件。所以下一次他們回到頁面時,結果仍然存在......但是如果他們清除了緩存,那麼它將被重置。在網頁上爲用戶保存本地數據的最佳方法?

什麼是最好的方式去做呢?...我可以堅持之間容易回發,但這是一個新的我。

謝謝你,史蒂夫

回答

1

可能使用Cookie,但請記住你只限於4KB的數據。

否則,將會話存儲在數據庫中。然後將該記錄ID保存到一個cookie。這樣您就可以根據Cookie中的ID從數據庫加載數據。然後只需刷新數據庫中的所有條目,比如說30天或其他事情。

0

由於缺乏睡眠,我給你一個PHP的答案。對不起,我將離開它,因爲信息仍然是正確的,只是在asp.net中的語法將略有不同

你有兩個選擇的數據持久性在php中; cookies會話

會話是服務器端,只要瀏覽器窗口保持打開狀態,就會持續。

Cookie是客戶端,並持續到用戶清除其緩存。

所以這聽起來像你想要一個cookie選項。因此,在您的搜索查詢處理器,添加行

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

這將創建客戶端機器上的cookie,名稱爲search_xxxx其中xxxx是一個時間戳(每個Cookie必須有一個唯一的名稱,否則會覆蓋海誓山盟)。

最後看起來奇怪的計算是到期時間,將來會設置爲120天。

然後在顯示您的搜索頁面的php文檔中,您需要吐出所有這些cookie值。

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

這會吐出在客戶機上找到的每個搜索項。 if語句是爲了確保它只顯示搜索詞cookie,而不是其他詞。

0

使用cookie。假設你開始叫terms搜索詞的List<string>,做到:

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); 

然後,當你需要再次訪問這些條款(數據綁定到一箇中繼器,或在您的網頁上顯示一些其他的方式處理):

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

一個Cookie可能是你今天的解決方案,但HTML5 localStorage最終將是最好的選擇。只有現在的瀏覽器版本才支持,取決於你的用戶。

相關問題