Today, when I was reviewing the session part of PHP, I suddenly came out a question: how to make PHP to append session ID(SID) to your page links automatically when cookies are forbidden in that browser? I managed to do this in JSP, but not sure whether the PHP can also handle this problem.

I checked the configuration files (php.ini) for my apache server, and there is a session section, under which there is a setting session.use_trans_sid = 0. After I changed this to session.use_trans_sid = 1, and restarted apache, the links of the page which invoked session_start() have now appended the SID. There is also an url_rewriter.tags, with which you can define what elements of a page will be appended.

Here are some demo codes:

sessions.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php ob_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
	<title>Untitled</title>
</head>
 
<body>
<?php
	ini_set('session.use_trans_sid','1'); //you can also do this instead of modify php.ini
	session_start();
	$_SESSION['test']='right!';
	//header('Location: sessions2.php'); //SID won't be appended in this situation
	//exit();
?>
<a href="sessions2.php">click here</a>
</body>
</html>
<?php ob_end_flush(); ?>

sessions2.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php ob_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
	<title>Untitled</title>
</head>
 
<body>
<?php
	session_start();
	echo $_SESSION['test'];
?>
 
</body>
</html>
<?php ob_end_flush(); ?>