Мне нужно передать сеанс асинхронному вызову через fsockopen в php.
Можете ли вы помочь мне передать сеанс в новый сокет?
РЕШЕНИЕ:
Следующий код работает.
start.php
<?php session_start(); $_SESSION['var1'] = 'value1'; async_call('/async.php'); echo '<pre>'; print_r($_SESSION); echo $_COOKIE['PHPSESSID'] . "\r\n"; echo '<a href="verify.php">verify.php</a>'; function async_call($filepath) { $host = 'sandbox'; // set to your domain $sock = fsockopen($host, 80); fwrite($sock, "GET $filepath HTTP/1.1\r\n"); fwrite($sock, "Host: $host\r\n"); fwrite($sock, "Cookie: PHPSESSID=" . $_COOKIE['PHPSESSID'] . "\r\n"); fwrite($sock, "Connection: close\r\n"); fwrite($sock, "\r\n"); fflush($sock); fclose($sock); } ?>
async.php
<?php session_start(); logger('confirm logger is working'); logger($_SESSION); // this is always blank! function logger($msg) { $filename = 'debug.log'; $fd = fopen($filename, "a"); if (is_array($msg)) $msg = json_encode($msg); $msg = '[' . date('Y/m/dh:i:s', time()) . "]\t" . $msg; fwrite($fd, $msg . "\n"); fclose($fd); } ?>
verify.php
<?php $logfile = 'debug.log'; echo '<a href="start.php">start.php</a>'; echo '<pre>' . file_get_contents($logfile); ?>
-<?php $logfile = 'debug.log'; echo '<a href="start.php">start.php</a>'; echo '<pre>' . file_get_contents($logfile); ?>
Я мог бы заставить это работать локально, но оказалось, что общий хост, на котором я работал, запретил fsockopen без какой-либо документации. Все хорошо на моих серверах. Спасибо за помощь.
Спасибо за помощь, Андреас. Оказывается, общий хост, на котором я работал, на запрещенном fsockopen без какой-либо документации. Вот почему я мог заставить его работать локально, но не на промежуточном сервере.
Следующий код работает.
start.php
<?php session_start(); $_SESSION['var1'] = 'value1'; async_call('/async.php'); echo '<pre>'; print_r($_SESSION); echo $_COOKIE['PHPSESSID'] . "\r\n"; echo '<a href="verify.php">verify.php</a>'; function async_call($filepath) { $host = 'sandbox'; // set to your domain $sock = fsockopen($host, 80); fwrite($sock, "GET $filepath HTTP/1.1\r\n"); fwrite($sock, "Host: $host\r\n"); fwrite($sock, "Cookie: PHPSESSID=" . $_COOKIE['PHPSESSID'] . "\r\n"); fwrite($sock, "Connection: close\r\n"); fwrite($sock, "\r\n"); fflush($sock); fclose($sock); } ?>
async.php
<?php session_start(); logger('confirm logger is working'); logger($_SESSION); // this is always blank! function logger($msg) { $filename = 'debug.log'; $fd = fopen($filename, "a"); if (is_array($msg)) $msg = json_encode($msg); $msg = '[' . date('Y/m/dh:i:s', time()) . "]\t" . $msg; fwrite($fd, $msg . "\n"); fclose($fd); } ?>
verify.php
<?php $logfile = 'debug.log'; echo '<a href="start.php">start.php</a>'; echo '<pre>' . file_get_contents($logfile); ?>
-<?php $logfile = 'debug.log'; echo '<a href="start.php">start.php</a>'; echo '<pre>' . file_get_contents($logfile); ?>