Set cookie chỉ xuất hiện một lần mỗi năm

Hien tại thì cái code này ai vào site mình thì cũng xuất hiện, nhưng mình chỉ nó muốn nó xuat hiên một lần duy nhất thôi. Mình muốn cái code này chỉ pop up một lần rồi set cookie cho 1 năm hoac mot thang sau thì mới xuât hiện lại. giúp mình với, cảm ơn

<!---warning 18-->
<div class="page-wrap" style="display: none;">

test


  </div>


  <div class="mature-content-warning">

    <div class="modal fade" id="myModal">
      <div class="modal-dialog">
        <div class="modal-content">
          <div class="modal-header">
            <h4 class="modal-title"><p style="font-size:25px; color:red"">WARNING ADULT CONTENT.</p></h4>
          </div>
          <div class="modal-body">
            <p class="lead">You must be at least 18 years of age to enter this website. Are you 18 and older?</p>
          </div>
<input type="button"  onclick="window.location.replace('http://www.google.com')" value="No, I'm under 18 leave...">


 </input>

          <div class="modal-footer">
 
            <button type="button" class="btn btn-success continue" data-dismiss="modal">Yes, I'm 18 and older.</button>
         
 </div>
        </div><!-- /.modal-content -->
      </div><!-- /.modal-dialog -->
    </div><!-- /.modal -->

  </div>

  <!-- vendors -->
  <script src="vendors/jquery-1.11.3.min.js"></script>
  <script src="vendors/bootstrap-3.3.4-dist/js/bootstrap.min.js"></script>

  <script>
    $(document).ready(function() {

      $(window).on('load', function() {
        $('#myModal').modal('show');
           
      });

      $('.continue').on('click', function() {
        $('.mature-content-warning').css('display', 'none');

 
        $('.page-wrap').fadeIn();
      });

    });





  </script>

https://www.w3schools.com/php/php_cookies.asp

2 Likes

Cái này đơn giản mà, chủ yếu là code bên server thôi. User mới truy cập website và nhấn vào button xác nhận 18+, browser sẽ gửi request lên server, server trả header Set-Cookie về để set cookie với thời hạn 1 năm. Giả sử cookie này tên là is18+ và có giá trị là true, bạn có 2 cách:

  • Cách 1, server trả code: Mỗi khi bạn truy cập vào website, server sẽ check xem client có cookie is18+ không, cookie này có phải có giá trị là true và cookie này hết hạn chưa. Nếu client không có cookie is18+, cookie is18+ không có giá trị là true hoặc cookie này hết hạn thì server sẽ đính kèm đoạn code trên vào response về client.

  • Cách 2, Client gửi request(tự động kèm theo cookie, trong đó có is18+) lên server để kiểm tra xem user đã xác nhận 18+ chưa. Server kiểm tra cookie is18+ như cách 1, rồi trả kết quả về client. Client căn cứ vào kết quả đó mà hiển thị thông báo

3 Likes

Với code như trên thì nên làm như thế nào? Mình mò hoài ko dc, bạn nào giup mình sữa cái JavaScript đó đẻ nó lưu cookie và chỉ xuất hiện cho ngươi vào lần đầu tiên rồi nếu như ngươid đó vào lại webside trong vòng 1 năm thì ko hiện nữa

Thì mình đã nói rồi mà, đó là việc của server. Bạn học back-end chưa đấy!? Cookie là từ server truyền xuống client được browser tự động lưu lại mà, chẳng có liên quan gì đến Javascript hết.

3 Likes

ờ thì thực ra dùng js set hay get cookie đều được cả, nên cái lỗi XSS nó nguy hiểm là vậy, vì nó có khả năng steal cookie (đánh cắp) trên máy người khác

còn việc đưa đáp án thì không phải thói quen của mình, mình chỉ đưa keyword, việc còn lại là tự google, tự đọc, đọc xong k hiểu đem lên hỏi tiếp nếu cần.

keyword thì đúng như mong muốn của bạn: how to set cookie by javascript

3 Likes

Thôi, dùng HTTPOnly cookie cho nó lành với lại cách của mình nó bảo mật hơn cách của bạn, mặc dù đúng là nó phức tạp hơn thật.

2 Likes

Cũng tuỳ điều kiện mà nói cookie này set bằng cách nào thì tốt. Nó chỉ mang tính đánh dấu, nếu user đã đánh dấu rồi thì thôi không redirect đến google nữa. Không có thông tin nhạy cảm gì cả nên không cần quan tâm đến XSS.

Cookie này không cần phải HTTP Only, set bằng javascript cũng không sao.

Cơ mà sao lại để nó trong cookie? Chúng ta đều biết, biển cảnh báo “Bạn đã đủ 18 tuổi chưa?” là biển cảnh báo vô dụng nhất trên đời, ai cũng sẽ bấm YES. Tức là ta chỉ có nhu cầu để hiện cái popup đó 1 lần. Nếu flag này để trong cookie, tức là mỗi request vào domain đó, ta đều phải gửi kèm cookie này, tốn 1 ít băng thông, chẳng đáng là bao nhưng cũng đáng để mention.

4 Likes

mình k đi sâu vào bảo mật hay ứng dụng nên xin phép k bàn tiếp 2 vấn đề này.
bạn ý hỏi set cookie thì mình giới thiệu thêm là client cũng set được thôi.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?