Ruby on Rails 5.2 - ActionDispatch::Cookies

वर्ग ActionDispatch :: कुकीज़




ruby

वर्ग ActionDispatch :: कुकीज़

जनक:
Object

कुकीज़ एक्शनकंट्रोलर # कुकीज़ के माध्यम से पढ़ी और लिखी गई हैं।

जिन कुकीज़ को पढ़ा जा रहा है वे अनुरोध के साथ प्राप्त की गई हैं, जो कुकीज़ लिखी जा रही हैं उन्हें प्रतिक्रिया के साथ बाहर भेजा जाएगा। कुकी को पढ़ने से कुकी ऑब्जेक्ट वापस नहीं मिलता है, बस इसका मूल्य है।

लेखन के उदाहरण:

# Sets a simple session cookie.
# This cookie will be deleted when the user's browser is closed.
cookies[:user_name] = "david"

# Cookie values are String based. Other data types need to be serialized.
cookies[:lat_lon] = JSON.generate([47.68, -122.37])

# Sets a cookie that expires in 1 hour.
cookies[:login] = { value: "XJ-122", expires: 1.hour }

# Sets a cookie that expires at a specific time.
cookies[:login] = { value: "XJ-122", expires: Time.utc(2020, 10, 15, 5) }

# Sets a signed cookie, which prevents users from tampering with its value.
# It can be read using the signed method `cookies.signed[:name]`
cookies.signed[:user_id] = current_user.id

# Sets an encrypted cookie value before sending it to the client which
# prevent users from reading and tampering with its value.
# It can be read using the encrypted method `cookies.encrypted[:name]`
cookies.encrypted[:discount] = 45

# Sets a "permanent" cookie (which expires in 20 years from now).
cookies.permanent[:login] = "XJ-122"

# You can also chain these methods:
cookies.signed.permanent[:login] = "XJ-122"

पढ़ने के उदाहरण:

cookies[:user_name]           # => "david"
cookies.size                  # => 2
JSON.parse(cookies[:lat_lon]) # => [47.68, -122.37]
cookies.signed[:login]        # => "XJ-122"
cookies.encrypted[:discount]  # => 45

हटाने के लिए उदाहरण:

cookies.delete :user_name

कृपया ध्यान दें कि यदि आप कुकी सेट करते समय: डोमेन निर्दिष्ट करते हैं, तो आपको कुकी को हटाते समय डोमेन को भी निर्दिष्ट करना होगा:

cookies[:name] = {
  value: 'a yummy cookie',
  expires: 1.year,
  domain: 'domain.com'
}

cookies.delete(:name, domain: 'domain.com')

कुकीज़ सेट करने के लिए विकल्प प्रतीक हैं:

  • :value - कुकी का मूल्य।

  • :path - वह मार्ग जिसके लिए यह कुकी लागू होती है। आवेदन की जड़ में चूक।

  • :domain - वह डोमेन जिसके लिए यह कुकी लागू होती है ताकि आप डोमेन स्तर तक सीमित रह सकें। यदि आप www.example.com जैसे स्कीमा का उपयोग करते हैं और user.example.com सेट :domain :all से :all साथ सत्र साझा करना चाहते हैं। कुकीज़ हटाते समय फिर से :domain विकल्प के साथ :all या Array को निर्दिष्ट करना सुनिश्चित करें।

    domain: nil  # Does not set cookie domain. (default)
    domain: :all # Allow the cookie for the top most level
                 # domain and subdomains.
    domain: %w(.example.com .example.org) # Allow the cookie
                                          # for concrete domain names.
  • :tld_length - जब उपयोग कर रहे हों :domain => :all , इस विकल्प का उपयोग TLD की लंबाई को स्पष्ट रूप से सेट करने के लिए किया जा सकता है जब एक TLD के हिस्से के रूप में व्याख्या की जा रही शॉर्ट (<= 3 वर्ण) डोमेन का उपयोग किया जाता है। उदाहरण के लिए, user1.lvh.me और user2.lvh.me के बीच कुकीज़ साझा करने के लिए, सेट करें :tld_length to 2।

  • :expires - वह समय जिस पर यह कुकी समाप्त हो जाती है, समय या ActiveSupport::Duration ऑब्जेक्ट के रूप में।

  • :secure - क्या यह कुकी केवल HTTPS सर्वर को प्रेषित की जाती है। डिफ़ॉल्ट false

  • :httponly - क्या यह कुकी स्क्रिप्टिंग या केवल HTTP के माध्यम से सुलभ है। false अवहेलना करता false

स्थिरांक

COOKIES_DIGEST
COOKIES_ROTATIONS
COOKIES_SERIALIZER
CookieOverflow

सत्र डेटा का 4K से अधिक संग्रहीत करने पर उठाया गया।

GENERATOR_KEY
HTTP_HEADER

Cookies आमतौर पर 4096 बाइट्स स्टोर कर सकते हैं।

SECRET_KEY_BASE
SECRET_TOKEN

पब्लिक क्लास के तरीके

नया (एप्लिकेशन) स्रोत दिखाएं
# File actionpack/lib/action_dispatch/middleware/cookies.rb, line 663
def initialize(app)
  @app = app
end

सार्वजनिक प्रवृत्ति के तरीके

# File actionpack/lib/action_dispatch/middleware/cookies.rb, line 667
def call(env)
  request = ActionDispatch::Request.new env

  status, headers, body = @app.call(env)

  if request.have_cookie_jar?
    cookie_jar = request.cookie_jar
    unless cookie_jar.committed?
      cookie_jar.write(headers)
      if headers[HTTP_HEADER].respond_to?(:join)
        headers[HTTP_HEADER] = headers[HTTP_HEADER].join("\n")
      end
    end
  end

  [status, headers, body]
end