summaryrefslogtreecommitdiff
path: root/ext/session/session.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/session/session.c')
-rw-r--r--ext/session/session.c32
1 files changed, 28 insertions, 4 deletions
diff --git a/ext/session/session.c b/ext/session/session.c
index 520c820f3..9e475296d 100644
--- a/ext/session/session.c
+++ b/ext/session/session.c
@@ -2,7 +2,7 @@
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2008 The PHP Group |
+ | Copyright (c) 1997-2009 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: session.c,v 1.417.2.8.2.42 2008/04/29 14:42:38 scottmac Exp $ */
+/* $Id: session.c,v 1.417.2.8.2.46 2008/12/31 11:17:43 sebastian Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -40,7 +40,7 @@
#include "ext/standard/md5.h"
#include "ext/standard/sha1.h"
#include "ext/standard/php_var.h"
-#include "ext/standard/datetime.h"
+#include "ext/date/php_date.h"
#include "ext/standard/php_lcg.h"
#include "ext/standard/url_scanner_ex.h"
#include "ext/standard/php_rand.h" /* for RAND_MAX */
@@ -1116,7 +1116,7 @@ static void php_session_send_cookie(TSRMLS_D)
t = tv.tv_sec + PS(cookie_lifetime);
if (t > 0) {
- date_fmt = php_std_date(t TSRMLS_CC);
+ date_fmt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s T")-1, t, 0 TSRMLS_CC);
smart_str_appends(&ncookie, COOKIE_EXPIRES);
smart_str_appends(&ncookie, date_fmt);
efree(date_fmt);
@@ -1509,6 +1509,15 @@ PHP_FUNCTION(session_set_save_handler)
zend_alter_ini_entry("session.save_handler", sizeof("session.save_handler"), "user", sizeof("user")-1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME);
+ mdata = PS(mod_data);
+
+ if (mdata) {
+ for (i = 0; i < 6; i++) {
+ zval_ptr_dtor(&mdata->names[i]);
+ }
+ efree(mdata);
+ }
+
mdata = emalloc(sizeof(*mdata));
for (i = 0; i < 6; i++) {
@@ -1916,6 +1925,21 @@ PHP_RINIT_FUNCTION(session)
}
}
+ if (PS(serializer) == NULL) {
+ char *value;
+
+ value = zend_ini_string("session.serialize_handler", sizeof("session.serialize_handler"), 0);
+ if (value) {
+ PS(serializer) = _php_find_ps_serializer(value TSRMLS_CC);
+ }
+ }
+
+ if (PS(mod) == NULL || PS(serializer) == NULL) {
+ /* current status is unusable */
+ PS(session_status) = php_session_disabled;
+ return SUCCESS;
+ }
+
if (PS(auto_start)) {
php_session_start(TSRMLS_C);
}