2013/10/29 Reindl Harald <[email protected]>

>
>
> Am 29.10.2013 14:53, schrieb Igor Zinovik:
> > My roundcube does not allow me to login into my mailbox.  It just writes:
> > " invalid request no data was saved "
> >
> > I enabled all logging settings in main.inc.php
> > $rcmail_config['smtp_log'] = true;
> > $rcmail_config['log_logins'] = true;
> > $rcmail_config['log_session'] = true;
> > $rcmail_config['sql_debug'] = true;
> > $rcmail_config['imap_debug'] = true;
> >
> > My Apache is able to successfully save sessions to /var/lib/php5/
>
> that's nice but roundcube still insists to not use the php session-handler
> otherwise i would no longer need to carry the patch from months ago in the
> RPM-SPEC
>

Hm...
# grep session_storage /etc/roundcubemail/main.inc.php
$rcmail_config['session_storage'] = 'db';

As I understand you patch just makes database default storage session.

Sessions are successfully createin in 'session' table.  After 3 login
attempts I
can see following:
# mysql -u roundcube -p roundcube -e 'select count(*) from session'
Enter password:
+----------+
| count(*) |
+----------+
|        3 |
+----------+



> Patch2: roundcubemail_native_session_handler.patch
>
> [builduser@buildserver:/rpmbuild/SPECS]$ cat
> ../SOURCES/roundcubemail_native_session_handler.patch
> diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
> index 4a73ff1..58332cb 100644
> --- a/config/main.inc.php.dist
> +++ b/config/main.inc.php.dist
> @@ -254,9 +254,10 @@ $rcmail_config['session_name'] = null;
>  // Session path. Defaults to PHP session.cookie_path setting.
>  $rcmail_config['session_path'] = null;
>
> -// Backend to use for session storage. Can either be 'db' (default) or
> 'memcache'
> -// If set to memcache, a list of servers need to be specified in
> 'memcache_hosts'
> +// Backend to use for session storage. Can either be 'db' (default),
> 'memcache' or 'php'
> +// If set to 'memcache', a list of servers need to be specified in
> 'memcache_hosts'
>  // Make sure the Memcache extension (http://pecl.php.net/package/memcache)
> version >= 2.0.0 is installed
> +// Setting this value to 'php' will use the default session save handler
> configured in PHP
>  $rcmail_config['session_storage'] = 'db';
>
>  // Use these hosts for accessing memcached
> diff --git a/program/include/rcmail.php b/program/include/rcmail.php
> index 89f2f96..a7ddb1e 100644
> --- a/program/include/rcmail.php
> +++ b/program/include/rcmail.php
> @@ -746,7 +746,7 @@ class rcmail extends rcube
>
>      // before closing the database connection, write session data
>      if ($_SERVER['REMOTE_ADDR'] && is_object($this->session)) {
> -      session_write_close();
> +      $this->session->write_close();
>      }
>
>      // write performance stats to logs/console
> diff --git a/program/lib/Roundcube/rcube.php
> b/program/lib/Roundcube/rcube.php
>
> index 4471ace..4e3f8fc 100644
>
> --- a/program/lib/Roundcube/rcube.php
>
> +++ b/program/lib/Roundcube/rcube.php
>
> @@ -457,7 +457,6 @@ class rcube
>
>          ini_set('session.name', $sess_name ? $sess_name :
> 'roundcube_sessid');
>
>          ini_set('session.use_cookies', 1);
>
>          ini_set('session.use_only_cookies', 1);
>
> -        ini_set('session.serialize_handler', 'php');
>
>          ini_set('session.cookie_httponly', 1);
>
>
>
>          // use database for storing session data
>
> @@ -471,7 +470,7 @@ class rcube
>
>
>
>          // start PHP session (if not in CLI mode)
>          if ($_SERVER['REMOTE_ADDR']) {
> -            session_start();
> +            $this->session->start();
>          }
>      }
>
> diff --git a/program/lib/Roundcube/rcube_session.php
> b/program/lib/Roundcube/rcube_session.php
> index dedde22..4e06827 100644
> --- a/program/lib/Roundcube/rcube_session.php
> +++ b/program/lib/Roundcube/rcube_session.php
> @@ -42,6 +42,7 @@ class rcube_session
>      private $secret = '';
>      private $ip_check = false;
>      private $logging = false;
> +    private $storage;
>      private $memcache;
>
>
> @@ -59,11 +60,14 @@ class rcube_session
>          $this->set_lifetime($lifetime);
>
>          // use memcache backend
> -        if ($config->get('session_storage', 'db') == 'memcache') {
> +        $this->storage = $config->get('session_storage', 'db');
> +        if ($this->storage == 'memcache') {
>              $this->memcache = rcube::get_instance()->get_memcache();
>
>              // set custom functions for PHP session management if
> memcache is available
>              if ($this->memcache) {
> +                ini_set('session.serialize_handler', 'php');
> +
>                  session_set_save_handler(
>                      array($this, 'open'),
>                      array($this, 'close'),
> @@ -79,7 +83,9 @@ class rcube_session
>                  true, true);
>              }
>          }
> -        else {
> +        else if ($this->storage != 'php') {
> +            ini_set('session.serialize_handler', 'php');
> +
>              // set custom functions for PHP session management
>              session_set_save_handler(
>                  array($this, 'open'),
> @@ -92,6 +98,22 @@ class rcube_session
>      }
>
>
> +    /**
> +     * Wrapper for session_start()
> +     */
> +    public function start()
> +    {
> +        session_start();
> +
> +        // copy some session properties to object vars
> +        if ($this->storage == 'php') {
> +            $this->key     = session_id();
> +            $this->ip      = $_SESSION['__IP'];
> +            $this->changed = $_SESSION['__MTIME'];
> +        }
> +    }
> +
> +
>      public function open($save_path, $session_name)
>      {
>          return true;
> @@ -116,6 +138,20 @@ class rcube_session
>
>
>      /**
> +     * Wrapper for session_write_close()
> +     */
> +    public function write_close()
> +    {
> +        if ($this->storage == 'php') {
> +            $_SESSION['__IP'] = $this->ip;
> +            $_SESSION['__MTIME'] = time();
> +        }
> +
> +        session_write_close();
> +    }
> +
> +
> +    /**
>       * Read session data from database
>       *
>       * @param string Session ID
>
>
>
_______________________________________________
Roundcube Users mailing list
[email protected]
http://lists.roundcube.net/mailman/listinfo/users

Reply via email to