2008-10-20 34 views
12

Có cách nào bạn có thể đặt lại trạng thái đã truy cập trên các liên kết không?Đặt lại trạng thái đã truy cập trên các liên kết

Kịch bản này là: Trên trang web mạng nội bộ tự nhiên có nhiều liên kết, chúng tôi muốn liên kết có trạng thái "được truy cập" trong một khoảng thời gian nhất định. Do đó, tôi đang tìm cách điều khiển trạng thái truy cập của các liên kết.

Điều này có thể thực hiện được không? Nó phải là trình duyệt chéo tất nhiên.

ETA: Các giải pháp phía máy khách hoàn toàn có thể chấp nhận được. Được ưu tiên thậm chí .. :-)

ETA-2: Cho phép cookie. Không có khoản giữ nào bị chặn tại đây :-)

+1

Cookie có được phép không? :) – TheObserver

Trả lời

2

Tôi tin rằng đây là tài sản của trình duyệt và do đó không thể kiểm soát được từ phía máy chủ.

Một 'hack' có thể là nối chuỗi truy vấn không được sử dụng vào cuối liên kết và xoay chúng theo định kỳ. Mặc dù điều này có nghĩa là độ dài của trạng thái 'được truy cập' cho một máy khách cụ thể phụ thuộc vào thời điểm chuỗi truy vấn quay thay vì một khoảng thời gian cố định.

3

Nếu một giải pháp phía máy chủ đơn giản với "thay đổi url", như:

"http://url1?expire2008_10_20" mà trở thành "http://url1?expire2008_10_21" sau 24 giờ,

không phải là ok, bạn có thể sử dụng như sau:

Cho phép máy chủ lưu trữ cookie trên trình duyệt với thời gian truy cập cuối cùng của liên kết. Nếu sẽ có rất nhiều liên kết và chiều dài Cookie tối đa sẽ không đủ, bạn có thể

  1. cửa hàng một cookie phiên và giữ cho dữ liệu truy cập trên máy chủ
  2. sử dụng đèn flash tương tự của cookie - Shared Object Local

Đồng thời đặt mã ngẫu nhiên url cho khách hàng nếu thời gian truy cập cuối cùng hết hạn.

7

Các liên kết xuất hiện dưới dạng "đã truy cập" khi trình duyệt chọn áp dụng :visitedCSS pseudo-class.

Cách phía khách hàng để đặt lại liên kết về trạng thái chưa được nêu là (bằng cách nào đó) xóa lịch sử duyệt web. Tôi sẽ rất ngạc nhiên khi biết rằng có một cách di động để làm điều đó. Nó cũng có tác dụng phụ khó chịu như làm tê liệt hành vi của các thanh vị trí thông minh nhạy cảm với lịch sử, chẳng hạn như thanh trong Firefox 3.

Như Drew Noakes đề xuất, cách phía máy chủ là thêm một số tham số truy vấn tiếng ồn vào liên kết và định kỳ thay đổi tham số truy vấn. Điều này chỉ cung cấp cho một xấp xỉ xấu của hành vi mà bạn muốn. Để có được hành vi "đúng" bạn cần theo dõi lịch sử của các trang đã truy cập trên mỗi máy chủ của người dùng, vì vậy bạn có thể thay đổi thông số tiếng ồn cho một trang cụ thể chỉ sau thời gian cần thiết.

Tất cả đã nói, rất có thể là một ý tưởng tồi khi thực sự cố gắng "đặt lại trạng thái đã truy cập trên các liên kết".

Tôi nghĩ một giải pháp tốt hơn là chỉnh sửa kiểu trang sao cho: lớp giả được truy cập hiển thị giống như lớp giả: liên kết. Sau đó, giữ lịch sử truy cập phía máy chủ cho mỗi người dùng và điều chỉnh hiển thị các liên kết bằng cách sử dụng lớp visited rõ ràng.

Nếu bạn không có danh tính người dùng thuận tiện và không muốn yêu cầu đăng nhập, bạn luôn có thể sử dụng cookie liên tục ngẫu nhiên.

0

Thay đổi trang đích để chấp nhận tham số từ chuỗi truy vấn và để đặt cookie có thời lượng phù hợp với giá trị đó.

Trên trang giới thiệu, hãy đặt một số Javascript để kiểm tra sự tồn tại của cookie.

Nếu nó không tồn tại, có Javascript thêm một tham số vào URL có một số ngẫu nhiên lớn trong nó (vì vậy lịch sử của trình duyệt sẽ không nhận ra nó.)

Nếu nó không tồn tại, có Javascript thêm một tham số với giá trị tương tự như các cookie (nên lịch sử của trình duyệt không nhận ra nó.)

Ghi chú:

  • tôi giả mục tiêu của liên kết là trên cùng một tên miền như trang giới thiệu . Nếu không, hãy sử dụng trang chuyển hướng trên cùng một tên miền.

  • Điều này sẽ chỉ hoạt động nếu lịch sử của trình duyệt miễn là tuổi thọ cookie của bạn. Nếu có lịch sử trình duyệt ngắn hoặc không có, khách hàng sẽ không hiển thị lịch sử như đã truy cập.

  • Vui lòng không làm điều này! Người dùng của bạn hiểu rõ về những gì "đã ghé thăm" có nghĩa là gì. đừng phá vỡ nó - bạn sẽ chỉ làm lẫn lộn chúng.

  • Bạn có cần xem xét các giải pháp phía máy chủ cho những người không chạy Javascript không?

  • Tôi chưa thử nghiệm thiết kế này.

6

tôi cảm thấy có gì đó có mùi trong ý tưởng đó.

mục đích đặt lại trạng thái đã truy cập liên kết là gì? để thông báo rằng một số dữ liệu mới có sẵn? sau đó có thể một cái gì đó chi tiết hơn như hình ảnh "MỚI" sẽ thích hợp hơn?

mặt khác nếu bạn thực sự cần thực hiện việc này - thay đổi URL

+1

Đó là mạng nội bộ. Tất cả các liên kết sẽ nhanh chóng được truy cập cho bất kỳ người dùng nào. Do đó, trạng thái truy cập mất bất kỳ ý nghĩa nào nếu không được đặt lại một lần trong một thời gian. – erlando

+1

thì có một câu hỏi tại sao bạn cần phân biệt giữa các liên kết được truy cập và không được truy cập? có lợi thế về khả năng sử dụng thực sự nào không? – miceuz

+2

Câu trả lời này tất cả, @erlando. Nếu bạn muốn đặt lại trạng thái đã truy cập, hãy thêm thứ gì đó vào cuối mỗi liên kết bạn muốn, chẳng hạn như http: // intranet/link # modified-2010-03-17 – cregox

0

Duy trì danh sách các url được truy cập bằng dấu thời gian cho phiên người dùng.

Khi tải trang web liên kết

  • tuôn url cũ liên kết
  • phong cách chứa trong danh sách như visted.
0

Khi vấn đề hiển thị hoàn toàn, bạn không cần phải lo lắng về việc bằng cách nào đó đánh dấu các liên kết đã truy cập trở lại không được xem trước.

Thêm trình xử lý onclick cho bạn liên kết thay đổi kiểu liên kết giống với trạng thái được truy cập. Từ trình xử lý này, bạn có thể ví dụ. viết trạng thái liên kết đến một cookie.

Sau đó, bạn có thể kiểm tra định kỳ xem có liên kết nào không hiển thị nữa và thay đổi kiểu trở lại bình thường.

6

Vì vậy, bạn chỉ muốn tạo liên kết "được truy cập" trông khác nhau trong một khoảng thời gian nhất định? Điều này rất dễ dàng nếu bạn bỏ qua kính giả :visited của trình duyệt và chỉ gán tên lớp tùy chỉnh. Sử dụng cookie; chúng đã hết hạn.

Thiết lập trình xử lý JavaScript cho khi bạn nhấp vào liên kết. Mã giả:

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 
} 

Nó sẽ chạy chức năng này ngay trước khi nó đi theo liên kết.

Sau đó, trên tải trang, bạn có thể làm một cái gì đó như thế này:

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"; 
    } 
    } 
} 

Grab the setCookie and readCookie functions từ Quirksmode.

1

Thay đổi cách hoạt động của liên kết thường gây nhầm lẫn và/hoặc làm phiền người dùng của bạn. Đó là một cách chắc chắn để giảm khả năng sử dụng được nhận thấy khả năng sử dụng của trang web của bạn.

Bạn đang thực sự cố gắng làm gì?

Nếu bạn có các trang con trong trang web của bạn thay đổi (trỏ đến nội dung mới), người dùng của bạn sẽ tìm ra số. Nếu bạn có bài viết mới sáng bóng từ hai hoặc ba cấp độ sâu trong cấu trúc trang của mình, hãy thêm một phần mục mới có liên kết trên trang chính của bạn nếu điều đó quan trọng. (Hoặc gửi thông báo có liên kết trong email, hoặc ...)

1

Có đủ để chỉ định dạng thuộc tính CSS :visited của liên kết để nó trông như thể nó chưa bao giờ được nhấp?

Tôi không biết bạn có muốn theo dõi các liên kết đã truy cập trong một thời gian hay chỉ hiển thị chúng cùng một lúc; nếu sau này, sau đó một CSS đơn giản (như dưới đây) sẽ làm.

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

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

Các vấn đề liên quan