diff --git a/lib/base.php b/lib/base.php
index 5deba7866f370c38fbc4cd3cd697358d14b21753..09e1d0aea493036edaa0b84d10c5d815d8ce5385 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -427,7 +427,8 @@ class OC {
 		// session timeout
 		if ($session->exists('LAST_ACTIVITY') && (time() - $session->get('LAST_ACTIVITY') > $sessionLifeTime)) {
 			if (isset($_COOKIE[session_name()])) {
-				setcookie(session_name(), '', time() - 42000, $cookie_path);
+				setcookie(session_name(), null, -1, self::$WEBROOT ? : '/');
+				unset($_COOKIE[session_name()]);
 			}
 			session_unset();
 			session_destroy();
diff --git a/lib/private/session/internal.php b/lib/private/session/internal.php
index 01d4569fd81903458c6de2a1d030be7011deddef..0b6152acf128c96b8fd7d70f741a5cc962d0e86e 100644
--- a/lib/private/session/internal.php
+++ b/lib/private/session/internal.php
@@ -41,7 +41,11 @@ class Internal extends Session {
 	public function __construct($name) {
 		session_name($name);
 		set_error_handler(array($this, 'trapError'));
-		session_start();
+		try {
+			session_start();
+		} catch (\Exception $e) {
+			setcookie(session_name(), null, -1, \OC::$WEBROOT ? : '/');
+		}
 		restore_error_handler();
 		if (!isset($_SESSION)) {
 			throw new \Exception('Failed to start session');