如何重新生成会话ID?

时间:2015-02-04 07:49:15

标签: php

我正在尝试重新生成会话ID但没有成功,我使用了session_regenerate_id()。但是当我们提交表格时,它显示:--- “警告:session_regenerate_id():无法重新生成会话ID - 已在第4行的C:\ xampp \ htdocs \ yogesh_traders \ yadmin \ quo_pro_temp.php中发送的标题”

请建议如何解决这个问题

<?php
$old_sessionid = session_id();
session_regenerate_id();
$new_sessionid = session_id();
echo "Old Session: $old_sessionid<br />";
echo "New Session: $new_sessionid<br />";
exit();
?>
<div align="center">
<img src="images/ajax-loader.gif" />
</div>
<?php
/* if($_REQUEST['clear']=='y' ){
$db->Delete('quotation_pro_temp',"session_id='".session_id()."'",1);
//session_regenerate_id();
} */

if(isset($_POST['senditem']))
{
if(count($_POST['senditem'])>0)
{

foreach($_POST['senditem'] as $setitem)
{
$a=$db->SelectSingle("product_details","id='".$setitem."'","");
$data["prod_id"] =$a["id"] ;
$data["pname"] = $a['pname'];
$data["brand"] = $a['brand'];
$data["qty"] = $_POST['qty'."-".$setitem];
$data["measure"] = $a['measure'];
$data["price"] =$_POST['price'."-".$setitem];
$data["mrp_field"] =$a['mrp_field'];
$data["discount"] = $_POST['disc'."-".$setitem]."-".$_POST['distype'."-".$setitem];
$data["total"] = $_POST['equals'."-".$setitem];
$data["session_id"] =$old_sessionid;
$db->Insert('quotation_pro_temp',$data);
echo "<meta HTTP-EQUIV=\"REFRESH\" content=\"0; url=inner_index.php?pagename=quotation_productwise_view&ins=y\">";  
}
}
}   
?>

2 个答案:

答案 0 :(得分:2)

在将任何内容发送到客户端之前(在任何输出之前),您必须调用此函数。

确保在此代码之前没有输出任何内容(例如非PHP代码或echo)或移动该功能。

您还可以使用输出缓冲(请参阅ob_start)将所有输出发送到缓冲区,而不是直接将其发送到客户端。

默认情况下也可以打开输出缓冲,将php.ini中的output-buffering设置为“打开”并重新启动服务器。另见:How do i edit php.ini file in xampp server

编辑后: 确保<?php位于第一行,并且前面没有空格。您的错误显示第4行,但代码位于第3行。

答案 1 :(得分:0)

  1. 您忘了拨打session_start()。
  2. 确保在&#34; session_start()&#34;之前没有任何输出,或者您已经发送了#34;标头已发送错误&#34;。
  3. 我在一个单独的php文件中尝试了你的代码,一切正常:
  4. <?php  
    session_start();  
    
    $old_sessionid = session_id();  
    session_regenerate_id();  
    $new_sessionid = session_id();  
    
    echo "Old Session: $old_sessionid";  
    echo "New Session: $new_sessionid";  
    exit;  
    ?>