无法将php的session存入数据库
<code><?php ob_end_clean(); if((int)ini_get('session.auto_start') > 0) { ini_set('session.auto_start',0); } function zen_session_open() { global $zen_session_db; $zen_session_db = new mysqli('localhost','root','wh36524','phptest'); return TRUE; } function zen_session_close() { global $zen_session_db; return $zen_session_db -> close(); } function zen_session_read($sid) { global $zen_session_db; $sql = 'select session_value from sessions where session_id="'.$sid.'"'; $query = $zen_session_db->query($sql); if($zen_session_db -> errno) { die($zen_session_db->error); } if($query -> num_rows == 1) { $data = $query->fetch_assoc(); return $data['session_value']; } else { return ""; } } function zen_session_write($sid,$data) { global $zen_session_db; $sql = 'select count(*) from sessions where session_id="'.$sid.'"'; $query = $zen_session_db->query($sql); if($zen_session_db->errno) { die($zen_session_db->error); } if($query->num_rows > 0) { $sql = 'update session set session_value="'.$data.'",expire='.(time()+60*60).' where session_id="'. $sid.'"'; $zen_session_db->query($sql); } else { $sql = 'insert into session values("'.$sid.'","'.(time()+60*60).'","'.$data.'")'; $zen_session_db->query($sql); } /* if($zen_session_db->affected_rows > 0) { return TRUE; } else { return FALSE; } */ return TRUE; } function zen_session_destroy($sid) { global $zen_session_db; $sql = 'delete from session where session_id="'.$sid.'"'; $zen_session_db->query($sql); $_SESSION = array(); return TRUE; } function zen_session_gc($time) { global $zen_session_db; $sql = 'delete from session where expire query($sql); return TRUE; } session_set_save_handler('zen_session_open','zen_session_close','zen_session_read','zen_session_write', 'zen_session_destroy','zen_session_gc' ); session_name('zenID'); session_start(); $_SESSION['age'] = 16; $_SESSION['color'] = 'green'; session_write_close(); </code>
不知道怎么回事,比到参考书写的,但是就是无法实现在数据库存储啊,我在另外一个页面拷贝了上面的代码,然后打印$_SESSION数组,但是是空的,不知道是哪里的问题?
<code><?php ob_end_clean(); if((int)ini_get('session.auto_start') > 0) { ini_set('session.auto_start',1); } function zen_session_open() { global $zen_session_db; $zen_session_db = new mysqli('localhost','root','wh36524','phptest'); return TRUE; } function zen_session_close() { global $zen_session_db; return $zen_session_db -> close(); } function zen_session_read($sid) { global $zen_session_db; $sql = 'select session_value from sessions where session_id="'.$sid.'"'; $query = $zen_session_db->query($sql); if($zen_session_db -> errno) { die($zen_session_db->error); } if($query -> num_rows == 1) { $data = $query->fetch_assoc(); return $data['session_value']; } else { return ""; } } function zen_session_write($sid,$data) { global $zen_session_db; $sql = 'select count(*) from sessions where session_id="'.$sid.'"'; $query = $zen_session_db->query($sql); if($zen_session_db->errno) { die($zen_session_db->error); } if($query->num_rows > 0) { $sql = 'update session set session_value="'.$data.'",expire='.(time()+60*60).' where session_id="'. $sid.'"'; $zen_session_db->query($sql); } else { $sql = 'insert into session values("'.$sid.'","'.(time()+60*60).'","'.$data.'")'; $zen_session_db->query($sql); } /* if($zen_session_db->affected_rows > 0) { return TRUE; } else { return FALSE; } */ return TRUE; } function zen_session_destroy($sid) { global $zen_session_db; $sql = 'delete from session where session_id="'.$sid.'"'; $zen_session_db->query($sql); $_SESSION = array(); return TRUE; } function zen_session_gc($time) { global $zen_session_db; $sql = 'delete from session where expire query($sql); return TRUE; } session_set_save_handler('zen_session_open','zen_session_close','zen_session_read','zen_session_write', 'zen_session_destroy','zen_session_gc' ); session_name('zenID'); session_start(); //$_SESSION['age'] = 16; //$_SESSION['color'] = 'green'; print_r($_SESSION); session_write_close(); </code>
回复内容:
<code><?php ob_end_clean(); if((int)ini_get('session.auto_start') > 0) { ini_set('session.auto_start',0); } function zen_session_open() { global $zen_session_db; $zen_session_db = new mysqli('localhost','root','wh36524','phptest'); return TRUE; } function zen_session_close() { global $zen_session_db; return $zen_session_db -> close(); } function zen_session_read($sid) { global $zen_session_db; $sql = 'select session_value from sessions where session_id="'.$sid.'"'; $query = $zen_session_db->query($sql); if($zen_session_db -> errno) { die($zen_session_db->error); } if($query -> num_rows == 1) { $data = $query->fetch_assoc(); return $data['session_value']; } else { return ""; } } function zen_session_write($sid,$data) { global $zen_session_db; $sql = 'select count(*) from sessions where session_id="'.$sid.'"'; $query = $zen_session_db->query($sql); if($zen_session_db->errno) { die($zen_session_db->error); } if($query->num_rows > 0) { $sql = 'update session set session_value="'.$data.'",expire='.(time()+60*60).' where session_id="'. $sid.'"'; $zen_session_db->query($sql); } else { $sql = 'insert into session values("'.$sid.'","'.(time()+60*60).'","'.$data.'")'; $zen_session_db->query($sql); } /* if($zen_session_db->affected_rows > 0) { return TRUE; } else { return FALSE; } */ return TRUE; } function zen_session_destroy($sid) { global $zen_session_db; $sql = 'delete from session where session_id="'.$sid.'"'; $zen_session_db->query($sql); $_SESSION = array(); return TRUE; } function zen_session_gc($time) { global $zen_session_db; $sql = 'delete from session where expire query($sql); return TRUE; } session_set_save_handler('zen_session_open','zen_session_close','zen_session_read','zen_session_write', 'zen_session_destroy','zen_session_gc' ); session_name('zenID'); session_start(); $_SESSION['age'] = 16; $_SESSION['color'] = 'green'; session_write_close(); </code>
不知道怎么回事,比到参考书写的,但是就是无法实现在数据库存储啊,我在另外一个页面拷贝了上面的代码,然后打印$_SESSION数组,但是是空的,不知道是哪里的问题?
<code><?php ob_end_clean(); if((int)ini_get('session.auto_start') > 0) { ini_set('session.auto_start',1); } function zen_session_open() { global $zen_session_db; $zen_session_db = new mysqli('localhost','root','wh36524','phptest'); return TRUE; } function zen_session_close() { global $zen_session_db; return $zen_session_db -> close(); } function zen_session_read($sid) { global $zen_session_db; $sql = 'select session_value from sessions where session_id="'.$sid.'"'; $query = $zen_session_db->query($sql); if($zen_session_db -> errno) { die($zen_session_db->error); } if($query -> num_rows == 1) { $data = $query->fetch_assoc(); return $data['session_value']; } else { return ""; } } function zen_session_write($sid,$data) { global $zen_session_db; $sql = 'select count(*) from sessions where session_id="'.$sid.'"'; $query = $zen_session_db->query($sql); if($zen_session_db->errno) { die($zen_session_db->error); } if($query->num_rows > 0) { $sql = 'update session set session_value="'.$data.'",expire='.(time()+60*60).' where session_id="'. $sid.'"'; $zen_session_db->query($sql); } else { $sql = 'insert into session values("'.$sid.'","'.(time()+60*60).'","'.$data.'")'; $zen_session_db->query($sql); } /* if($zen_session_db->affected_rows > 0) { return TRUE; } else { return FALSE; } */ return TRUE; } function zen_session_destroy($sid) { global $zen_session_db; $sql = 'delete from session where session_id="'.$sid.'"'; $zen_session_db->query($sql); $_SESSION = array(); return TRUE; } function zen_session_gc($time) { global $zen_session_db; $sql = 'delete from session where expire query($sql); return TRUE; } session_set_save_handler('zen_session_open','zen_session_close','zen_session_read','zen_session_write', 'zen_session_destroy','zen_session_gc' ); session_name('zenID'); session_start(); //$_SESSION['age'] = 16; //$_SESSION['color'] = 'green'; print_r($_SESSION); session_write_close(); </code>
提问应该尽可能多的提供线索,比如你的 SQL
语句是什么样的,这样别人在测试的时候方便多了,我现在还需要自己来创建:
<code>sql</code><code>CREATE TABLE `session` ( `session_id` char(128) DEFAULT NULL, `expire` int(11) DEFAULT NULL, `session_value` text ) ENGINE=MyISAM DEFAULT CHARSET=utf8 </code>
环境信息也尽可能的提供,比如我的代码可以运行在 php 5.5.16-pl0-gentoo
问题1、你的表名有问题,读的时候用了,sessions ; 写的时候是用的 session
问题2、貌似通过 open 方法时打开的数据库链接在其它地方用不了,(这个原因我也不清楚,后面可以了解下为什么),去官方看了下,都是使用的 class 来完成的。所以把你的改成了 OOP 的形式测试可用。
<code><?php ob_end_clean(); if((int)ini_get('session.auto_start') > 0) { ini_set('session.auto_start',0); } class MySqlSessionHandler implements SessionHandlerInterface { private $_db; public function close() { return $this->_db->close(); } public function destroy($sessionn_id) { $sql = 'delete from sessions where session_id="'.$session_id.'"'; $this->_db->query($sql); $_SESSION = array(); return TRUE; } public function gc($maxlifetime) { $sql = 'delete from sessions where expire query($sql); return TRUE; } public function open($save_path, $name) { $this->_db = new mysqli('localhost','root','password','test'); return (boolean)$this->_db; } public function read($session_id) { $sql = 'select session_value from sessions where session_id="'.$session_id.'"'; $query = $this->_db->query($sql); if($this->_db->errno) { die($this->_db->error); } if($query -> num_rows == 1) { $session_data = $query->fetch_assoc(); return $session_data['session_value']; } else { return ""; } } public function write($session_id, $session_data) { $sql = 'select count(*) as count from sessions where session_id="'.$session_id.'"'; $query = $this->_db->query($sql); $result = $query->fetch_assoc(); if($this->_db->errno) { die($this->_db->error); } if($result['count'] > 0) { $sql = 'update sessions set session_value=\''.$session_data.'\',expire='.(time()+60*60).' where session_id="'. $session_id.'"'; $this->_db->query($sql); } else { $sql = 'insert into sessions values("'.$session_id.'","'.(time()+60*60).'",\''.$session_data.'\')'; $this->_db->query($sql); } if($this->_db->affected_rows > 0) { return TRUE; } else { return FALSE; } } } $handler = new MySqlSessionHandler; session_set_save_handler($handler, true); session_name('zenID'); session_start(); $_SESSION['age'] = 17; $_SESSION['color'] = 'green'; $_SESSION['color2'] = 'red'; </code>

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는
