2013-01-19 29 views
8

Tôi nhận thấy rằng các ứng dụng grails, giống như hầu hết các ứng dụng web dựa trên java khác, luôn tạo ra một phiên, ngay cả khi nó không được sử dụng.Grails không có phiên

Chỉ có thể đặt cookie JSESSIONID khi cần thiết, ví dụ: khi ai đó cố gắng đăng nhập?

+1

tại sao bạn cần phải lo lắng về điều đó? – Gregg

+0

hai lý do: 1) nếu bạn tạo phiên, cookie sẽ được đặt. Nếu tôi giải thích "Luật Cookie Châu Âu" mới đúng cách, bạn phải yêu cầu khách truy cập hiểu rõ trước khi bạn đặt cookie. 2) một phiên sử dụng tài nguyên. Nếu tôi không cần phiên, tại sao tôi nên tạo một phiên? Và nếu tôi phơi bày giao diện REST và ứng dụng khách bỏ qua cookie, mỗi yêu cầu sẽ tạo phiên mới :-( – rdmueller

+0

Bạn nên thực hiện thêm một số nghiên cứu: Đồng ý không cần thiết Bất kỳ cookie nào, không phải vì sự hiện diện của nó, trang web sẽ không thể sử dụng được, ví dụ như cookie phiên duy trì nội dung của giỏ hàng của khách hàng thông qua quy trình thanh toán. Điều đó nói rằng, nếu bạn sử dụng cùng một cookie này để theo dõi hành vi của khách hàng mà không hỏi trước, thì điều này sẽ yêu cầu sự đồng ý. : //www.enchiladadigital.com/services/cookie-audits/eu-cookie-law-what-you-need-to-know/ – Gregg

Trả lời

4

Thế hệ của một cookie phiên có thể được vô hiệu hóa bằng cách thêm các chỉ thị trang sau đây:

<%@ page session="false" %> 
1

Tôi không chắc chắn những gì phiên bản của grails đã được sử dụng ở trên, nhưng tôi đã chạy vào một vấn đề tương tự trong một ứng dụng lớn. Ứng dụng của tôi đã được phân chia giữa UI/gsp và các Bộ điều khiển khác đã phân phối json/xml thuần túy mà không có chế độ xem. Phần giao diện người dùng được cho là phần duy nhất sử dụng phiên, nhưng các dịch vụ cũng đã trả về JSessionId.

Do việc áp dụng là lớn, để khắc phục sự cố, tôi tạo ra các ứng dụng mới với grails 1.3.7 và 2.2.1, với một bộ điều khiển cơ bản:

class FooController { 
    static defaultAction = "lookatme" 
    def lookatme = {render(view:'lookatme')} 
    def hallo = {render(text:"<xml>some xml</xml>",contentType:"text/xml",encoding:"UTF-8")} 
    def somestate = {session.foo = "bar"; render(text:"<xml>some xml</xml>",contentType:"text/xml",encoding:"UTF-8")} 
} 

Khi tôi chạy trên tomcat, không lookatme hoặc hallo trả về một JSessionId. Hành động somestate. Sau khi quay lại mã của chúng tôi, chúng tôi đã tìm thấy các địa điểm (ví dụ: một số bộ lọc) đang cố gắng truy cập phiên khi không nên sử dụng.

Nếu mã của bạn đang trả về phiên thông qua cookie JSessionId và bạn không nghĩ rằng, nên đảm bảo không có mã được sử dụng trong hành động đó (hoặc bộ lọc) truy cập session (hoặc flash?).

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