Server IP : 195.201.23.43 / Your IP : 18.225.235.148 Web Server : Apache System : Linux webserver2.vercom.be 5.4.0-192-generic #212-Ubuntu SMP Fri Jul 5 09:47:39 UTC 2024 x86_64 User : kdecoratie ( 1041) PHP Version : 7.1.33-63+ubuntu20.04.1+deb.sury.org+1 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /lib/ruby/2.7.0/cgi/ |
Upload File : |
# frozen_string_literal: true require_relative 'util' class CGI # Class representing an HTTP cookie. # # In addition to its specific fields and methods, a Cookie instance # is a delegator to the array of its values. # # See RFC 2965. # # == Examples of use # cookie1 = CGI::Cookie.new("name", "value1", "value2", ...) # cookie1 = CGI::Cookie.new("name" => "name", "value" => "value") # cookie1 = CGI::Cookie.new('name' => 'name', # 'value' => ['value1', 'value2', ...], # 'path' => 'path', # optional # 'domain' => 'domain', # optional # 'expires' => Time.now, # optional # 'secure' => true, # optional # 'httponly' => true # optional # ) # # cgi.out("cookie" => [cookie1, cookie2]) { "string" } # # name = cookie1.name # values = cookie1.value # path = cookie1.path # domain = cookie1.domain # expires = cookie1.expires # secure = cookie1.secure # httponly = cookie1.httponly # # cookie1.name = 'name' # cookie1.value = ['value1', 'value2', ...] # cookie1.path = 'path' # cookie1.domain = 'domain' # cookie1.expires = Time.now + 30 # cookie1.secure = true # cookie1.httponly = true class Cookie < Array @@accept_charset="UTF-8" unless defined?(@@accept_charset) TOKEN_RE = %r"\A[[!-~]&&[^()<>@,;:\\\"/?=\[\]{}]]+\z" PATH_VALUE_RE = %r"\A[[ -~]&&[^;]]*\z" DOMAIN_VALUE_RE = %r"\A(?<label>(?!-)[-A-Za-z0-9]+(?<!-))(?:\.\g<label>)*\z" # Create a new CGI::Cookie object. # # :call-seq: # Cookie.new(name_string,*value) # Cookie.new(options_hash) # # +name_string+:: # The name of the cookie; in this form, there is no #domain or # #expiration. The #path is gleaned from the +SCRIPT_NAME+ environment # variable, and #secure is false. # <tt>*value</tt>:: # value or list of values of the cookie # +options_hash+:: # A Hash of options to initialize this Cookie. Possible options are: # # name:: the name of the cookie. Required. # value:: the cookie's value or list of values. # path:: the path for which this cookie applies. Defaults to # the value of the +SCRIPT_NAME+ environment variable. # domain:: the domain for which this cookie applies. # expires:: the time at which this cookie expires, as a +Time+ object. # secure:: whether this cookie is a secure cookie or not (default to # false). Secure cookies are only transmitted to HTTPS # servers. # httponly:: whether this cookie is a HttpOnly cookie or not (default to # false). HttpOnly cookies are not available to javascript. # # These keywords correspond to attributes of the cookie object. def initialize(name = "", *value) @domain = nil @expires = nil if name.kind_of?(String) self.name = name self.path = (%r|\A(.*/)| =~ ENV["SCRIPT_NAME"] ? $1 : "") @secure = false @httponly = false return super(value) end options = name unless options.has_key?("name") raise ArgumentError, "`name' required" end self.name = options["name"] value = Array(options["value"]) # simple support for IE self.path = options["path"] || (%r|\A(.*/)| =~ ENV["SCRIPT_NAME"] ? $1 : "") self.domain = options["domain"] @expires = options["expires"] @secure = options["secure"] == true @httponly = options["httponly"] == true super(value) end # Name of this cookie, as a +String+ attr_reader :name # Set name of this cookie def name=(str) if str and !(str =~ TOKEN_RE) raise ArgumentError, "invalid name: #{str.dump}" end @name = str end # Path for which this cookie applies, as a +String+ attr_reader :path # Set path for which this cookie applies def path=(str) if str and !(str =~ PATH_VALUE_RE) raise ArgumentError, "invalid path: #{str.dump}" end @path = str end # Domain for which this cookie applies, as a +String+ attr_reader :domain # Set domain for which this cookie applies def domain=(str) if str and ((str = str.b).bytesize > 255 or !(str =~ DOMAIN_VALUE_RE)) raise ArgumentError, "invalid domain: #{str.dump}" end @domain = str end # Time at which this cookie expires, as a +Time+ attr_accessor :expires # True if this cookie is secure; false otherwise attr_reader :secure # True if this cookie is httponly; false otherwise attr_reader :httponly # Returns the value or list of values for this cookie. def value self end # Replaces the value of this cookie with a new value or list of values. def value=(val) replace(Array(val)) end # Set whether the Cookie is a secure cookie or not. # # +val+ must be a boolean. def secure=(val) @secure = val if val == true or val == false @secure end # Set whether the Cookie is a httponly cookie or not. # # +val+ must be a boolean. def httponly=(val) @httponly = !!val end # Convert the Cookie to its string representation. def to_s val = collect{|v| CGI.escape(v) }.join("&") buf = "#{@name}=#{val}".dup buf << "; domain=#{@domain}" if @domain buf << "; path=#{@path}" if @path buf << "; expires=#{CGI.rfc1123_date(@expires)}" if @expires buf << "; secure" if @secure buf << "; HttpOnly" if @httponly buf end # Parse a raw cookie string into a hash of cookie-name=>Cookie # pairs. # # cookies = CGI::Cookie.parse("raw_cookie_string") # # { "name1" => cookie1, "name2" => cookie2, ... } # def self.parse(raw_cookie) cookies = Hash.new([]) return cookies unless raw_cookie raw_cookie.split(/;\s?/).each do |pairs| name, values = pairs.split('=',2) next unless name and values values ||= "" values = values.split('&').collect{|v| CGI.unescape(v,@@accept_charset) } if cookies.has_key?(name) cookies[name].concat(values) else cookies[name] = Cookie.new(name, *values) end end cookies end # A summary of cookie string. def inspect "#<CGI::Cookie: #{self.to_s.inspect}>" end end # class Cookie endPrivate