public function getProposedSessionId()
{
// if no session has already been load, initialize the session manager
/** @var \AppserverIo\Appserver\ServletEngine\SessionManagerInterface $manager */
$manager = $this->getContext()->search('SessionManagerInterface');
// if no session manager was found, we don't support sessions
if ($manager == null) {
return;
}
// if we can't find a requested session name, we try to load the default session cookie
if ($this->getRequestedSessionName() == null) {
$this->setRequestedSessionName($manager->getSessionSettings()->getSessionName());
}
// load the requested session ID and name
$sessionName = $this->getRequestedSessionName();
$id = $this->getRequestedSessionId();
// try to load session ID from session cookie of request/response
$cookieFound = null;
if ($id == null && $this->getResponse()->hasCookie($sessionName)) {
$cookieFound = $this->getResponse()->getCookie($sessionName);
} elseif ($id == null && $this->hasCookie($sessionName)) {
$cookieFound = $this->getCookie($sessionName);
}
// check if we can find a cookie
if (is_array($cookieFound)) {
// iterate over the cookies and try to find one that is not expired
foreach ($cookieFound as $cookie) {
if ($cookie instanceof CookieInterface && $cookie->isExpired() === false) {
$this->setRequestedSessionId($id = $cookie->getValue());
}
}
// if we found a single cookie instance
} elseif ($cookieFound instanceof CookieInterface && $cookieFound->isExpired() === false) {
$this->setRequestedSessionId($id = $cookieFound->getValue());
}
// return the requested session
return $id;
}