@@ -33,6 +33,7 @@ class Mage_Core_Model_Session_Abstract_Varien extends Varien_Object
33
33
public const VALIDATOR_SESSION_LIFETIME = 'session_lifetime ' ;
34
34
public const VALIDATOR_PASSWORD_CREATE_TIMESTAMP = 'password_create_timestamp ' ;
35
35
public const SECURE_COOKIE_CHECK_KEY = '_secure_cookie_check ' ;
36
+ public const REGISTRY_CONCURRENCY_ERROR = 'concurrent_connections_exceeded ' ;
36
37
37
38
/** @var bool Flag true if session validator data has already been evaluated */
38
39
protected static $ isValidated = false ;
@@ -71,6 +72,9 @@ public function start($sessionName = null)
71
72
/* @var Cm_RedisSession_Model_Session $sessionResource */
72
73
$ sessionResource = Mage::getSingleton ('cm_redissession/session ' );
73
74
$ sessionResource ->setSaveHandler ();
75
+ if (method_exists ($ sessionResource , 'setDieOnError ' )) {
76
+ $ sessionResource ->setDieOnError (false );
77
+ }
74
78
break ;
75
79
case 'user ' :
76
80
// getSessionSavePath represents static function for custom session handler setup
@@ -148,7 +152,20 @@ public function start($sessionName = null)
148
152
session_cache_limiter ((string )$ sessionCacheLimiter );
149
153
}
150
154
151
- session_start ();
155
+ // Start session, abort and render error page if it fails
156
+ try {
157
+ if (session_start () === false ) {
158
+ throw new Exception ('Unable to start session. ' );
159
+ }
160
+ } catch (Throwable $ e ) {
161
+ session_abort ();
162
+ if (Mage::registry (self ::REGISTRY_CONCURRENCY_ERROR )) {
163
+ require_once Mage::getBaseDir () . DS . 'errors ' . DS . '503.php ' ;
164
+ die ();
165
+ } else {
166
+ Mage::printException ($ e );
167
+ }
168
+ }
152
169
153
170
Mage::dispatchEvent ('session_before_renew_cookie ' , ['cookie ' => $ cookie ]);
154
171
0 commit comments