2008-10-20 57 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; 
}