Index: lib/camping.rb
===================================================================
--- lib/camping.rb	(revision 243)
+++ lib/camping.rb	(working copy)
@@ -33,8 +33,9 @@
 C.qsp(fn,'&;',fh,q)if fn;fh.tempfile.rewind if fh.is_a?H end;when
 "application/x-www-form-urlencoded": q.u(C.qsp(@in.read))end
 @cookies,@input=@k.dup,q.dup end;def service *a;@body=send @method,*a
-headers['Set-Cookie']=cookies.map{|k,v|"#{k}=#{C.escape(v)}; path=#{self/
-"/"}"if v!=@k[k]}-[nil];self end;def to_s;"Status: #@status#{Z+(headers.inject([
+headers['Set-Cookie']=cookies.map{|k,v|"#{k}=#{C.escape(v[:value] || v)}; path=#{self/
+"/"}; expires=#{v[:expires] && v[:expires].strftime('%a, %d-%b-%Y %H:%M:%S %Z') 
+|| nil}"if v!=@k[k]}-[nil];self end;def to_s;"Status: #@status#{Z+(headers.inject([
 ]){|a,o|[*o[1]].map{|v|a<<[o[0],v]*": "if v&&v.to_s.any?};a}*Z)+Z+Z}#@body"end
 end;X=module Controllers;@r=[];class<<self;def r;@r end;def R *u;r=@r
 Class.new{meta_def(:urls){u};meta_def(:inherited){|x|r<<x}}end
Index: lib/camping-unabridged.rb
===================================================================
--- lib/camping-unabridged.rb	(revision 243)
+++ lib/camping-unabridged.rb	(working copy)
@@ -454,7 +454,9 @@
     # on before and after overrides with Camping.
     def service(*a)
       @body = send(@method, *a)
-      headers['Set-Cookie'] = cookies.map { |k,v| "#{k}=#{C.escape(v)}; path=#{self/"/"}" if v != @k[k] } - [nil]
+      headers['Set-Cookie'] = cookies.map { |k,v| 
+        "#{k}=#{C.escape(v[:value] || v)}; path=#{self/"/"}; expires=#{v[:expires] && v[:expires].strftime('%a, %d-%b-%Y %H:%M:%S %Z') || nil}" if v != @k[k] 
+      } - [nil]
       self
     end
 
