2008-10-20 77 views
12

有什麼方法可以重置鏈接上的訪問狀態?重置鏈接上的訪問狀態

情況是這樣的:在自然有很多鏈接的內聯網站點上,我們希望鏈接僅在一段時間內具有「已訪問」狀態。因此,我正在尋找一種方法來處理鏈接的訪問狀態。

這是可行的嗎?它當然應該是跨瀏覽器的。

ETA:客戶端解決方案完全可以接受。首選即使.. :-)

ETA-2:Cookies是允許的。沒有持有禁止在這裏:-)

+1

Cookie是否允許? :) – TheObserver 2008-10-20 08:25:20

回答

2

我相信這是瀏覽器的屬性,所以不能從服務器端控制。

一個'黑客'可能是在鏈接末尾附加一個未使用的查詢字符串,並定期輪換它們。雖然這意味着特定客戶端的「訪問」狀態的長度取決於查詢字符串何時旋轉而不是固定的時間段。

3

如果具有「改變的URL」,是一個簡單的服務器端解決方案:即成爲

http://url1?expire2008_10_20」「http://url1?expire2008_10_21」 24小時後,

也不行,你可以使用以下命令:

讓服務器在瀏覽器中存儲鏈接上次訪問時間的cookie。如果將有很多的環節和最大的cookie長度是不夠的,你可以

  1. 店會話cookie,並保持服務器的餅乾
  2. 使用閃光燈模擬訪問了數據 - 本地共享對象

還放置一個代碼,如果上次訪問時間已過期,則會隨機化客戶端的url。

7

當瀏覽器選擇應用:visitedCSS pseudo-class時,鏈接顯示爲「visited」。

重置鏈接到未訪問狀態的客戶端方法是(以某種方式)清除瀏覽歷史記錄。我會很驚訝地發現有一種便攜的方式來做到這一點。它還具有不愉快的副作用,例如削弱了歷史敏感的智能位置欄(如Firefox 3中的位置欄)的行爲。

正如Drew Noakes所建議的,服務器端的方法是將一些噪聲查詢參數添加到鏈接並定期更改查詢參數。這隻會給你想要的行爲一個不好的近似值。要獲得「正確」行爲,您需要跟蹤每個用戶服務器端訪問過的頁面的歷史記錄,以便您只能在必要的時間後更改特定頁面的噪聲參數。

所有說,實際上試圖「重置鏈接訪問狀態」可能是一個壞主意。

我認爲一個更好的解決方案是調整頁面樣式,使visited:pseudo僞類與:僞僞類相同。然後保留每個用戶訪問鏈接的服務器端歷史記錄,並使用明確的visited類來調整鏈接的顯示。

如果您沒有用戶標識,並且不想要求登錄,則始終可以使用隨機的持久cookie。

0

將目標頁面更改爲接受來自查詢字符串的參數,並將具有適當生命週期的cookie設置爲該值。

在引用頁面上,放一些Javascript來檢查cookie的存在。

如果它不存在,有JavaScript的一個參數添加到URL與它(所以瀏覽器的歷史將無法識別它。)

如果它確實存在,有一個大的隨機數加入JavaScript參數與相同的值的cookie(所以瀏覽器的歷史不承認它。)

注:

  • 我假定鏈接的目標是在相同的域引用頁。如果沒有,請在同一個域上使用重定向頁面。

  • 這隻有在瀏覽器的歷史和你的cookie一樣長時纔有效。如果瀏覽器歷史記錄短或沒有,客戶端將不會顯示爲已訪問。

  • 請不要這樣做!您的用戶對「訪問」的含義有很好的理解。不要打破它 - 你只會混淆它們。

  • 對於不運行Javascript的人,您需要考慮服務器端解決方案嗎?

  • 我還沒有測試過這個設計。

6

我覺得在想法中有臭味。

重置鏈接訪問狀態的目的是什麼?通知一些新的數據可用?那麼可能更像「NEW」這樣更爲詳細的圖像會更合適?

在另一方面,如果你真的需要做到這一點

- 更改URL

+1

這是一個內聯網。任何一位用戶都可以快速訪問所有鏈接。因此,如果不及時重置,訪問狀態將失去任何意義。 – erlando 2008-10-20 09:29:51

0

維護URL列表與時間戳的用戶會話訪問。

當包含在列表中的鏈接頁面加載

  • 刷新陳舊的URL
  • 風格的鏈接,造訪的。
0

由於問題純粹是可視化的,您不必擔心將訪問的鏈接標記爲未訪問。

添加一個onclick處理程序鏈接,它將鏈接樣式更改爲類似訪問狀態。從這個處理程序你可以例如。將鏈接狀態寫入cookie。

然後,您可以定期檢查是否存在不應再顯示的鏈接,並將樣式改回正常狀態。

6

所以你只是想讓「訪問」的鏈接看起來有一定的時間不同?如果繞過瀏覽器的:visited僞類並只分配一個自定義類名,這很簡單。使用cookies;他們已經內置到期。

設置一個JavaScript處理程序,當你點擊鏈接時。僞代碼:

function clickHandler(event) { 
    var href = /* (figure out which anchor was clicked and get the href) */ 
    // (you might need to escape the href) 

    setCookie(href, "visited", 5); // set cookie for 5 days 
} 

它會在跟隨鏈接之前運行此功能。

然後,在頁面加載,你可以做這樣的事情:

function markVisitedLinks() { 
    var anchors = document.getElementsByTagName("a"); 

    for (var i = 0; i < anchors.length; i++) { 
    if (readCookie(anchors[i].href) == "visited") { 
     anchors[i].className += " visited"; 
    } 
    } 
} 

抓鬥the setCookie and readCookie functions從怪異模式。

1

更改鏈接的工作方式通常會混淆和/或擾亂用戶。這是一種可靠的方式,可以降低您網站的可用性。

你真的想完成什麼?

如果您網站中的子頁面發生更改(指向新內容),那麼您的用戶將會計算出。如果您的頁面結構中有兩到三個層次的新文章,請在主頁上添加新增部分的鏈接,如果它很重要的話。 (或通過電子郵件中的鏈接發送通知,或...)

1

僅格式化鏈接的:visited CSS屬性就足以讓它看起來好像從未點擊過嗎?

我不知道你是否想要跟蹤訪問過的鏈接一段時間,或者只是一直顯示它們;如果是後者,那麼就是一個簡單的CSS(如下所示)。

a, a:visited { 
    color: blue; 
    text-decoration: underline 
} 

a:hover, a:active { 
    color: orange; 
}