我如何在不调用session_start的情况下获得会话 - php

我现在有一个彗星页面,如果我在顶部调用session_start然后会话冻结,那么我的解决方法是:

function getTables($sessionID = null){

        if(!isset($this->output)){
            $this->output = array();
        }

        if(!isset($this->output[$this->sessID])){
            $this->output[$this->sessID] = array();
        }
        $hostname = php_uname("n");

        $sess_ini = session_save_path();
        chdir($sess_ini);
        if(false === ($save = @file_get_contents("sess_$this->sessID"))){
            $cwd = getcwd();
            chdir($this->location);
            return (isset($this->returnJSON[$this->sessID])?$this->returnJSON[$this->sessID]
                    :json_encode(array(
                        'sess_local'=>"$sess_ini/sess_$this->sessID",
                        'save'=>$save,
                        'hostname'=>$hostname,
                        'cwd'=>$cwd,
                        'reg_local'=>$this->location,
                        )
                    )
                );
        }
        chdir($this->location);
        //session_id($sessionID);
        $sessions = explode("|",$save);
        $_SESSION['all'] = array();
        foreach($sessions as $key=>$sess){
            if(trim($sess)=='all' && isset($sessions[$key+1])){
                $_SESSION['all'] = unserialize(trim(urldecode($sessions[$key+1])));
                break;
            }
        }
        ...

有没有让我获得会话变量的更好的方法,那就是不要进入会话文件?

参考方案

您的解决方法可以更简单:

 <?php
 //yes, start normally.
 session_start();

 //now, immediately harvest the variables you need to remember from the $_SESSION
 $somevar_you_want_to_remember = $_SESSION['somevar'];

 //close the session, so it won't lock:
 session_write_close();

 //disable some errors which aren't really errors:
 ini_set('session.use_cookies',false);
 session_cache_limiter(false);

 //you are now free to do anything you like:
 while(true){

     echo "<script>window.parent.test_function('".time().' sessionvar: '.$somevar_you_want_to_remember."');</script>";

     flush_buffers();
     sleep(1);
     //if you need to refresh your variable, you can just reopen the session:
     session_start();
     $somevar_you_want_to_remember = $_SESSION['somevar'];
     //and immediately close again
     session_write_close();         
}

您可以编写一些辅助函数,例如:

 function SaveQuickSessionVar($name,$value){
      session_start();
      $_SESSION[$name] = $value;
     session_write_close();     
 }

 function GetQuickSessionVar($name){
     session_start();
     $var = $_SESSION[$name];
     session_write_close(); 
     return $var;    
 }

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

php:是否有充分的理由引用所有数组键/索引? - php

我正在遍历别人的代码,他们总是避免转义其数组键。例如:$ row_rsCatalogsItems [名称]代替$ row_rsCatalogsItems ['名称']因此,我不断地对自己接触的所有事物进行微小的更改,以应对这些惰性。但是现在我想知道这样做是否有很多好处。我得到它会在默认为字符串之前检查常量(我在处理常量时会讨厌php中的行为,因为即使未定义,…

CakePHP将数据传递到元素 - php

我的控制器中有以下代码:function index() { $posts = $this->set('posts', $this->Portfolio->find('all')); if (isset($this->params['requested'])) { retur…

phpWord中的粗体,空格和缩进文本 - php

我有一些要加粗的文本,与前几段和后几段分开并缩进。我不能让所有三个属性一起工作。这适用于粗体和空格:$section = $phpWord->addSection(); $section->addText( 'Re: Your Application for Post of Security Guard', array(�…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…