What version of PHP and IE?
I tested this using the two files below, and they worked perfectly in both IE and Opera (latest versions of both).
Could be a problem of an older version of something not handling it correctly, in which case you could try this:
session_start();
$old_sessid = session_id();
session_regenerate_id();
$new_sessid = session_id();
session_id($old_sessid);
$old_session = $_SESSION;
session_destroy();
session_id($new_sessid);
session_start();
$_SESSION = $old_session;
Here are the two files that I tried and worked in both IE and Opera:
<?php
//TEST.PHP
session_start();
if(!isset($_SESSION['secur
ity_number
']) || !is_numeric($_SESSION['sec
urity_numb
er'])) {
$_SESSION['security_number
'] = rand(100000,999999);
}
else {
session_regenerate_id();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml"
xml:lang="en" lang="en">
<head>
<title>Test</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="content-style-
type" content="text/css" />
</head>
<body>
<?php echo $_SESSION['security_number
'].'<br />'; ?>
<a href="test1.php">Go Forward</a>
</body>
</html>
<?php
//TEST1.PHP
session_start();
if(!isset($_SESSION['secur
ity_number
']) || !is_numeric($_SESSION['sec
urity_numb
er'])) {
$_SESSION['security_number
'] = rand(100000,999999);
}
else {
session_regenerate_id();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml"
xml:lang="en" lang="en">
<head>
<title>Test 1</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="content-style-
type" content="text/css" />
</head>
<body>
<?php echo $_SESSION['security_number
'].'<br />'; ?>
<a href="test.php">Go Back</a>
</body>
</html>