<?PHP
-//
-// ctdlsession.php
+// $Id$
//
// This gets called from within the header functions. It establishes or
// connects to a PHP session, and then connects to Citadel if necessary.
global $session, $clientsocket;
- // echo "Calling session_start()<BR>\n";
- // flush();
session_start();
- $session = "CtdlSession." . session_id();
+
+ if ($_SESSION["ctdlsession"]) {
+ $session = $_SESSION["ctdlsession"];
+ }
+ else {
+ $session = "CtdlSession." . time() . rand(1000,9999) ;
+ $_SESSION["ctdlsession"] = $session;
+ }
// See if there's a Citadel connection proxy open for this session.
// The name of the socket is identical to the name of the
$sockname = "/tmp/" . $session . ".socket" ;
- // echo "Connecting to ", $sockname, "...<BR>\n";
- // flush();
$clientsocket = fsockopen($sockname, 0, $errno, $errstr, 5);
if (!$clientsocket) {
- //echo "Socket not present. Firing up a new proxy.<BR>\n";
- //flush();
-
// It ain't there, dude. Open up the proxy. (C version)
//$cmd = "./sessionproxy " . $sockname ;
//exec($cmd);
sleep(2);
// Ok, now try again.
- // echo "Connecting to ", $sockname, "...<BR>\n";
- // flush();
$clientsocket = fsockopen($sockname, 0, $errno, $errstr, 5);
+
+ // Try to log the user back in.
+ if ($clientsocket) {
+
+
+ if ($_SESSION["username"]) {
+ login_existing_user(
+ $_SESSION["username"],
+ $_SESSION["password"]
+ );
+ }
+ }
}
if ($clientsocket) {
- /*
- echo "Connected. Performing echo tests.<BR>\n";
- flush();
- $cmd = "ECHO test echo string upon connection\n";
- fwrite($clientsocket, $cmd);
- $response = fgets($clientsocket, 4096);
- echo "Response is: ", $response, "<BR>\n";
- flush();
-
- $cmd = "ECHO second test for echo\n";
- fwrite($clientsocket, $cmd);
- $response = fgets($clientsocket, 4096);
- echo "Response is: ", $response, "<BR>\n";
- flush();
- */
+ if (!$_SESSION["serv_humannode"]) {
+ ctdl_get_serv_info();
+ }
}
else {
echo "ERROR: no Citadel socket!<BR>\n";
global $clientsocket, $session;
// Tell the Citadel server to terminate our connection.
- fwrite($clientsocket, "QUIT\n");
+ // (The extra newlines force it to see that the Citadel session
+ // ended, and the proxy will quit.)
+ //
+ fwrite($clientsocket, "QUIT\n\n\n\n\n\n\n\n\n\n\n");
$response = fgets($clientsocket, 4096); // IGnore response
fclose($clientsocket);
unset($clientsocket);
// Now clear our PHP session.
- unset($session);
- session_destroy();
+ $_SESSION = array();
+ session_write_close();
}
?>