Parent

Included Modules

Files

WebAgent::CookieManager

Constants

SPECIAL_DOMAIN

Attributes

cookies[R]
cookies_file[RW]
accept_domains[RW]
reject_domains[RW]
netscape_rule[RW]

Public Class Methods

new(file=nil) click to toggle source
     # File lib/httpclient/cookie.rb, line 223
223:     def initialize(file=nil)
224:       @cookies = Array.new()
225:       @cookies.extend(MonitorMixin)
226:       @cookies_file = file
227:       @is_saved = true
228:       @reject_domains = Array.new()
229:       @accept_domains = Array.new()
230:       @netscape_rule = false
231:     end

Public Instance Methods

add(cookie) click to toggle source
     # File lib/httpclient/cookie.rb, line 328
328:     def add(cookie)
329:       url = cookie.url
330:       name, value = cookie.name, cookie.value
331:       expires, domain, path = 
332:         cookie.expires, cookie.domain, cookie.path
333:       secure, domain_orig, path_orig = 
334:         cookie.secure?, cookie.domain_orig?, cookie.path_orig?
335:       discard, override = 
336:         cookie.discard?, cookie.override?
337: 
338:       domainname = url.host
339:       domain_orig, path_orig = domain, path
340:       use_security = override
341: 
342:       if domain
343: 
344:         # [DRAFT 12] s. 4.2.2 (does not apply in the case that
345:         # host name is the same as domain attribute for version 0
346:         # cookie)
347:         # I think that this rule has almost the same effect as the
348:         # tail match of [NETSCAPE].
349:         if domain !~ /^\./ && domainname != domain
350:           domain = '.'+domain
351:         end
352: 
353:         # [NETSCAPE] rule
354:         if @netscape_rule
355:           n = total_dot_num(domain)
356:           if n < 2
357:             cookie_error(SpecialError.new(), override)
358:           elsif n == 2
359:             ## [NETSCAPE] rule
360:             ok = SPECIAL_DOMAIN.select{|sdomain|
361:               sdomain == domain[-(sdomain.length)..1]
362:             }
363:             if ok.empty?
364:               cookie_error(SpecialError.new(), override)
365:             end
366:           end
367:         end
368: 
369:         # this implementation does not check RFC2109 4.3.2 case 2;
370:         # the portion of host not in domain does not contain a dot.
371:         # according to nsCookieService.cpp in Firefox 3.0.4, Firefox 3.0.4
372:         # and IE does not check, too.
373:       end
374: 
375:       path ||= url.path.sub(%/[^/]*|, '')
376:       domain ||= domainname
377:       @cookies.synchronize do
378:         cookie = find_cookie_info(domain, path, name)
379:         if !cookie
380:           cookie = WebAgent::Cookie.new()
381:           cookie.use = true
382:           @cookies << cookie
383:         end
384:         check_expired_cookies()
385:       end
386: 
387:       cookie.url = url
388:       cookie.name = name
389:       cookie.value = value
390:       cookie.expires = expires
391:       cookie.domain = domain
392:       cookie.path = path
393: 
394:       ## for flag
395:       cookie.secure = secure
396:       cookie.domain_orig = domain_orig
397:       cookie.path_orig = path_orig
398:       if discard || cookie.expires == nil
399:         cookie.discard = true
400:       else
401:         cookie.discard = false
402:         @is_saved = false
403:       end
404:     end
check_expired_cookies() click to toggle source
     # File lib/httpclient/cookie.rb, line 266
266:     def check_expired_cookies()
267:       @cookies.reject!{|cookie|
268:         is_expired = (cookie.expires && (cookie.expires < Time.now.gmtime))
269:         if is_expired && !cookie.discard?
270:           @is_saved = false
271:         end
272:         is_expired
273:       }
274:     end
cookies=(cookies) click to toggle source
     # File lib/httpclient/cookie.rb, line 233
233:     def cookies=(cookies)
234:       @cookies = cookies
235:       @cookies.extend(MonitorMixin)
236:     end
find(url) click to toggle source
     # File lib/httpclient/cookie.rb, line 298
298:     def find(url)
299:       return nil if @cookies.empty?
300: 
301:       cookie_list = Array.new()
302:       @cookies.each{|cookie|
303:         is_expired = (cookie.expires && (cookie.expires < Time.now.gmtime))
304:         if cookie.use? && !is_expired && cookie.match?(url)
305:           if cookie_list.select{|c1| c1.name == cookie.name}.empty?
306:             cookie_list << cookie
307:           end
308:         end
309:       }
310:       return make_cookie_str(cookie_list)
311:     end
load_cookies() click to toggle source
     # File lib/httpclient/cookie.rb, line 406
406:     def load_cookies()
407:       return if !File.readable?(@cookies_file)
408:       @cookies.synchronize do
409:         @cookies.clear
410:         File.open(@cookies_file,'r'){|f|
411:           while line = f.gets
412:             cookie = WebAgent::Cookie.new()
413:             @cookies << cookie
414:             col = line.chomp.split(/\t/)
415:             cookie.url = URI.parse(col[0])
416:             cookie.name = col[1]
417:             cookie.value = col[2]
418:             if col[3].empty? or col[3] == '0'
419:               cookie.expires = nil
420:             else
421:               cookie.expires = Time.at(col[3].to_i).gmtime
422:             end
423:             cookie.domain = col[4]
424:             cookie.path = col[5]
425:             cookie.set_flag(col[6])
426:           end
427:         }
428:       end
429:     end
parse(str, url) click to toggle source
     # File lib/httpclient/cookie.rb, line 276
276:     def parse(str, url)
277:       cookie = WebAgent::Cookie.new()
278:       cookie.parse(str, url)
279:       add(cookie)
280:     end
save_all_cookies(force = nil, save_unused = true, save_discarded = true) click to toggle source
     # File lib/httpclient/cookie.rb, line 238
238:     def save_all_cookies(force = nil, save_unused = true, save_discarded = true)
239:       @cookies.synchronize do
240:         check_expired_cookies()
241:         if @is_saved and !force
242:           return
243:         end
244:         File.open(@cookies_file, 'w') do |f|
245:           @cookies.each do |cookie|
246:             if (cookie.use? or save_unused) and
247:                 (!cookie.discard? or save_discarded)
248:               f.print(cookie.url.to_s,"\t",
249:                       cookie.name,"\t",
250:                       cookie.value,"\t",
251:                       cookie.expires.to_i,"\t",
252:                       cookie.domain,"\t",
253:                       cookie.path,"\t",
254:                       cookie.flag,"\n")
255:             end
256:           end
257:         end
258:       end
259:       @is_saved = true
260:     end
save_cookies(force = nil) click to toggle source
     # File lib/httpclient/cookie.rb, line 262
262:     def save_cookies(force = nil)
263:       save_all_cookies(force, false, false)
264:     end

Private Instance Methods

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.