TurboGears - Cookie & Phiên

Nó thường được yêu cầu giữ dữ liệu duyệt web đơn giản được đính kèm với trình duyệt của người dùng. Phiên là kỹ thuật được sử dụng phổ biến nhất. Phiên đại diện cho dữ liệu không cần được lưu trữ ở dạng lâu dài hơn như tệp đĩa hoặc cơ sở dữ liệu.

Tuy nhiên, sessiondata trong TurboGears có thể được hỗ trợ bởi hệ thống tệp, cơ sở dữ liệu hoặc các giá trị cookie được băm. Một lượng nhỏ dữ liệu phiên thường được lưu trong cookie, nhưng đối với khối lượng dữ liệu phiên lớn hơn, MemCache được sử dụng.

MemCache là một daemon cấp hệ thống. Nó cung cấp quyền truy cập nhanh vào dữ liệu đã lưu trong bộ nhớ cache và có khả năng mở rộng cực kỳ cao. Tuy nhiên, nó chỉ được thiết kế để sử dụng trên các máy chủ an toàn và do đó phải được duy trì và bảo mật bởi sysadmin.

Beaker trong quản lý phiên

TurboGears sử dụng Beaker để quản lý phiên. Theo mặc định, một dự án khởi động nhanh bằng hộp số được định cấu hình để sử dụng cookie đã băm để lưu trữ dữ liệu phiên.

Mỗi khi khách hàng kết nối, phần mềm trung gian phiên (Beaker) sẽ kiểm tra cookie bằng cách sử dụng tên cookie đã được xác định trong tệp cấu hình. Nếu không tìm thấy cookie, cookie sẽ được đặt trong trình duyệt. Trong tất cả các lần truy cập tiếp theo, phần mềm trung gian sẽ tìm thấy cookie và sử dụng nó.

Để cho phép quản lý phiên, lớp phiên phải được kết hợp trong dự án bằng cách sau câu lệnh nhập:

from tg import session

Để lưu dữ liệu trong một biến phiên -

session[‘key’] = value
session.save()

Để truy xuất biến phiên -

return session[‘key’]

Lưu ý rằng bạn cần lưu phiên một cách rõ ràng để các khóa của bạn được lưu trữ trong phiên đó.

Các delete() phương thức của đối tượng phiên sẽ xóa tất cả các phiên người dùng -

session.delete()

Mặc dù không phải thông lệ xóa tất cả các phiên người dùng trên bất kỳ môi trường sản xuất cụ thể nào, nhưng bạn thường sẽ làm điều đó để dọn dẹp sau khi thực hiện xong các bài kiểm tra chức năng hoặc khả năng sử dụng.

Dưới đây là một ví dụ đơn giản để minh họa các phiên. Lớp RootController có mộtsetsession() phương thức đặt một biến phiên.

from hello.lib.base import BaseController
from tg import expose, session
class RootController(BaseController):
   
   @expose()
   def setsession(self):
      session['user'] = 'MVL'
      session.save()
      
      str = "<b>sessionVariable set to "+session['user'] 
      str = str+"<br><a href = '/getsession'>click here to retrieve</a></b>"
      return str
   
   @expose()
   def getsession(self):
      return "<b>value of session variable retrieved " +session['user'] +"</b>"

Đi vào http://localhost:8080/setsession

Một liên kết trong trình duyệt dẫn đến http://localhost:8080/getsession lấy và hiển thị biến phiên -