- Electron version: 0.36.12
- Operating system: OSX

There are two problems with `expirationDate`.
### First Problem

`expirationDate` is not returned on non-session cookies.

``` javascript
// not setting session here so it should default to false
var obj = {
  name: 'foo',
  value: 'bar',
  path: '/',
  expirationDate: 2093792393, // 20 years in the future
  url: 'http://localhost/'
}

var cookies = win.webContents.session.cookies

cookies.set(obj, function(err){
  cookies.get({name: "foo"}), function(err, cookies){
    cookies[0].name === 'foo' // => true
    cookies[0].session === false // => true

    // we're missing the expirationDate property!
    cookies[0].expirationDate === undefined // => true
  })
})
```
### Second Problem

When a cookie is marked as a `session` cookie the `expirationDate` property is returned as `0` but it should not be returned at all.

``` javascript
var obj = {
  name: 'foo',
  value: 'bar',
  path: '/',
  session: true, // marking session as true
  url: 'http://localhost/'
}

var cookies = win.webContents.session.cookies

cookies.set(obj, function(err){
  cookies.get({name: "foo"}), function(err, cookies){
    // per the docs this should not have the
    // expirationDate property but it does
    // https://github.com/electron/electron/blob/master/docs/api/session.md#sescookiesgetfilter-callback
    cookies[0].expirationDate === 0 // => true
  })
})
```

atom/browser/api/atom_api_cookies.cc
const base::Closure& callback) {
  auto getter = make_scoped_refptr(request_context_getter_);
  content::BrowserThread::PostTask(
      BrowserThread::IO, FROM_HERE,
      base::Bind(RemoveCookieOnIOThread, getter, url, name, callback));
}
void Cookies::Set(const base::DictionaryValue& details,
                  const SetCallback& callback) {
  scoped_ptr<base::DictionaryValue> copied(details.CreateDeepCopy());
  auto getter = make_scoped_refptr(request_context_getter_);
  content::BrowserThread::PostTask(
      BrowserThread::IO, FROM_HERE,
      base::Bind(SetCookieOnIO, getter, Passed(&copied), callback));
}
mate::Handle<Cookies> Cookies::Create(
    v8::Isolate* isolate,
    content::BrowserContext* browser_context) {
  return mate::CreateHandle(isolate, new Cookies(isolate, browser_context));
}
void Cookies::BuildPrototype(v8::Isolate* isolate,
                             v8::Local<v8::ObjectTemplate> prototype) {
  mate::ObjectTemplateBuilder(isolate, prototype)
      .SetMethod("get", &Cookies::Get)
      .SetMethod("remove", &Cookies::Remove)
      .SetMethod("set", &Cookies::Set);
}
}  
}