session_start() не работает в функции

Статус
В этой теме нельзя размещать новые ответы.
А SQL зачем?
Сессию можно заменить простым файлом.
 
Привет.
Если не сложно, то приведите пожалуйста пример.
А если сделать через cookie?
 
Если значение КАПЧИ пихать в куки, то можно с таким же успехом обойтись и без капчи.
 
Просто встретил реализацию на куки ht-p://www.nevius.ru/text.php?link=5
ДАК как насчет примера на файлах?
 
общение с куки тоже требует работы с заголовками что в свою очередь требует того что б в поток пока еще ничего не напечатано (до всяких там print, echo, print_r, var_dump) или использовать пресловутую ob_start-буферизацию ( не думаю что буфферизация сильно нагрузит сервер тем более страница то менее чем 100 кб весит, если весит больше это уже проблема)
 
Просто встретил реализацию на куки ht-p://www.nevius.ru/text.php?link=5
ДАК как насчет примера на файлах?

Обратно придумываем велосипед, новенький но корявенький :)

PHP:
<?php
// Пример на PHP 5
class session implements Iterator 
{
	private static $_instance = null;

	private static $_session_id = null;

	private static $_folder = '/sessions/';
	
	private static $_session_name = 'SESSIONID';
	
	private $_SESSION = array();
	
	private $_init = false;

	public static function &getInstance()
	{
		if (null === self::$_instance) {
			self::$_instance = new self();
		}
		return self::$_instance;
	}

	function __construct()
	{
		$this->_init = true;
		$this->_SESSION = $this->read(self::start());
	}
	
	protected function read($id)
	{
		$file = dirname(__FILE__) . self::$_folder . $id;
		if (is_file($file)) {
			return unserialize(file_get_contents($file));
		}
		return array();
	}
	
	protected function write($id)
	{
		file_put_contents(dirname(__FILE__) . self::$_folder . $id, serialize($this->_SESSION));
	}

	function __destruct() {
		if ($this->_init) $this->write(self::start());
		$this->_init = false;
	}

	public static function start()
	{
		if (empty($_COOKIE[self::$_session_name])) {
			self::$_session_id = $_REQUEST[self::$_session_name] = $_COOKIE[self::$_session_name] = md5(time() . rand(0, 100000));
			setcookie(self::$_session_name, self::$_session_id, null, '/');
		} else {
			self::$_session_id = $_COOKIE[self::$_session_name];
		}
		return self::$_session_id;
	}

	/**
	 * Set param
	 *
	 * @param string $name
	 * @param mixed $value
	 */
	public function __set ($name,  $value)
	{
		$this->_SESSION[$name] = $value;
	}

	/**
	 * Static set param
	 *
	 * @param string $name
	 * @param mixed $value
	 */
	public static function set($name,  $value)
	{
		$_this = self::getInstance();
		$_this->$name = $value;
	}

	/**
	 * Get param
	 *
	 * @param string $name
	 * @return mixed
	 */
	public function __get($name)
	{
		if (!isset($this->$name)) return null;
		return $this->_SESSION[$name];
	}

	/**
	 * Static get param
	 *
	 * @param string $name
	 * @return mixed
	 */
	public static function get($name = null)
	{
		$_this = self::getInstance();
		if (empty($name)) {
			return $_this->_SESSION;
		}
		return $_this->$name;
	}

	public function __isset($name)
	{
		return isset($this->_SESSION[$name]);
	}

	public function __unset($name = null)
	{
		unset($this->_SESSION[$name]);
	}
	
	public static function destroy()
	{
		self::$_instance->__destruct();
		self::$_instance = null;
	}

	public function rewind() {
		reset($this->_SESSION);
	}

	public function current() {
		return current($this->_SESSION);
	}

	public function key() {
		return key($this->_SESSION);
	}

	public function next() {
		return next($this->_SESSION);
	}

	public function valid() {
		return $this->current() !== false;
	}

}

session::start(); // Где то до вывода контента имитируемым старт СЕССИИ

session::set('val3', 'val3');
session::set('val2', 1);
//ИЛИ
$session = session::getInstance();
$session->val21 = 'val21';
$session->val22 = 2;

session::destroy();

$session = session::getInstance();
foreach ($session as $key => $val) {
	echo "{$key} => {$val}<br />";
}
Приблизительно так же работает сессия;
Надо только еще по крону чистить папку sessions :)
 
А так не пробывали

просто присвоить ссесии id
А то бывает что всё правильно - но не работает и все тут , сам сталкивался - в старой версии некоторых cms работает а в новых только таким способом.
PHP:
if ($_POST['keystring']) { session_id('f'); session_start(); }
	if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring'])
 
Столкнулся с такой проблемкой делаю капчу с CMS за основу была взята капча captcha.ru всё вроде сделал вывод но вот сталкнулся с такой проблемкой это проверка кода.
Код вывода и проверки находится в основном файле функции портала function.php и выглядит так
Код:
function stopspam() {
   global $mkportals, $DB, $std, $print, $mklib, $Skin, $mklib_board;
   session_start(); 
   $stopspam ="1";
 if ($stopspam==1) {
     $content ="<p><img src=\"{$MK_PATH}mkportal/antispam/kcaptcha.php\"></p>
<p><input type=\"text\" name=\"keystring\"></p>";
  
    } else {
        $content = "<input type=\"hidden\" name=\"keystring\" value=\"0\">";
    }
        return $content;
}
function stopspam_check() {
    global $mkportals, $DB, $std, $print, $mklib, $Skin, $mklib_board;
    session_start();
    $code = $_POST['keystring'];

    if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $code){
        echo "Correct";
    }else{
        echo "Wrong $code";
    }

unset($_SESSION['captcha_keystring']);
   
}
Функция вывода и stopspam_check и функция проверки
Нопроблема в том что session_start(); не работает в этом файле функций не ошибок не чего нет.
Если просто создать php файл с содержанием
Код:
<?php
session_start();

?>
то сессия создается, а если вызвать на страницу сайта это же из файла фукции то сессия не создается в чем может быть причина?
Небходимо начать сессию извне, до начала функции.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху