iT邦幫忙

1

請教各位前輩關於商品瀏覽紀錄的做法

想請教一個問題就是購物網站上都會顯示瀏覽過的商品
目前有聽到人家說只要有訪問過商品頁面就會有id,然後再透過id將資料儲存在session或localstorage裡面。

但聽的不是很明白,想請教各位前輩該如何做才好。

0
孤獨一隻雞
iT邦新手 4 級 ‧ 2021-09-18 00:15:45
最佳解答

將訪問過的ID存在localstorage,下次載入時,先去撈localstorage裡面的ID,將這幾筆商品做成歷史足跡了

https://ithelp.ithome.com.tw/upload/images/20210918/20097001e2ITCeoKrm.png

可以請教您該如何將訪問過的ID存入localtorage裡面嗎?
我對訪問過的ID這一塊感覺有點模糊,不知道該如何獲取並儲存

id 通常會在api要回來的資料裡面,表示他是這商品的唯一值,但至於你們的id應該從哪欄位取得,我也無法得知,畢竟也沒看到程式碼

0
小魚
iT邦大師 1 級 ‧ 2021-09-18 00:11:59

Session是有時效性的,
也有可能是把資料存在資料庫當中.

在我認知中,瀏覽過的商品在我下次登入時也看得到,代表不可能在Session,應是資料庫才是 ~

0

我不知道大眾是怎麼做,是我的話,會用儲存資料庫的做法

帳號表 - id,使用者名稱 密碼等等等...
商品表 - id,名稱,圖片位置等等...
瀏覽紀錄表 - 商品id,帳號id,瀏覽時間等等...

使用者在瀏覽某個商品的同時,會儲存記錄至瀏覽紀錄表...

使用者在某個頁面想要顯示瀏覽紀錄時,則讀取該使用者之瀏覽紀錄表前3筆(依照瀏覽時間)...
此紀錄包含商品id,也可做按鈕再次導向該商品...

我的作法,在登出後,兩百年後再次登入,依然能見到瀏覽紀錄~
就要看你的需求要到哪一種地步~
如果是Session,就沒辦法像我這樣了~ 至於localstorage ,應該算是清除cookie才失效吧!?

當然這種機制,瀏覽紀錄表膨脹量會很大,也許會限制單一使用者最多存幾筆紀錄,其餘覆蓋...還有很多可以優化這種資料庫的作法,就不在這談了

1
Felix
iT邦新手 5 級 ‧ 2021-09-24 03:23:22

目前業界是儲存於資料庫中,為了避免占用空間,每次新增後,多餘筆數就會刪除。

如果沒有跨裝置存取資料的需求,使用 localStorage 即可:

(function () {
    let no = new URL(document.location).searchParams.get('no');
    /* 讀取 */
    let hst = localStorage.getItem('history') || [];
    /* 新增 */
    hst.push(no);
    /* 儲存 */
    localStorage.setItem('history', JSON.stringify(hst.slice(-5)));
})();

實作大概就是這樣。

我要發表回答

立即登入回答