草庐IT

php:页面导航后 session 消失

coder 2024-04-27 原文

我已经阅读了我能找到的关于这个问题的所有帖子,但是,到目前为止,没有一个解决方案对我有用。显然,我忽略了一些重要的事情。我也不知道如何调试 session 。我读了一篇文章,PHP session Debugging ,但这超出了我的理解范围。

因此,与其他问题非常相似,当我导航到应用程序中的另一个页面时,无论是通过链接还是表单提交,我的 session 都会消失。我不知道为什么我的 session 消失了。如果有人有时间帮我调查,将不胜感激。

这些是我的 php.ini 设置

; Name of the session (used as cookie name).  
session.name = PHPSESSID  

; The path for which the cookie is valid.  
session.cookie_path = /

这是第一个显示的 View

<?php
session_start();
if (!isset($_SESSION['session_id'])) {
    $_SESSION['session_id'] = session_id();
}
if (!isset($_SESSION['invoices'])) {
    $_SESSION['invoices'] = $invoices;
}

if (isset($_SESSION['session_id'])) {
    print_r($_SESSION['session_id'] . " in invoiceList.<br />");
} else {
    echo 'No session ID set in invoiceList <br />';
}
?>
<div>

    <table>
        <tr>            
            <th>Customer Name</th>
            <th>Invoice Date</th>
            <th>Invoice Number</th>
        </tr>
        <tr>
            <?php
            include_once 'form/editInvoice.php';
            if (isset($invoices)) {

                foreach ($invoices as $invoice) {
                    ?>
                <tr>
                    <td><?php echo $invoice['customer_name'] ?></td>
                    <td><?php echo $invoice['invoice_date'] ?></td>
                    <td><?php echo $invoice['invoice_number'] ?></td>
                    <td><a href='<?php echo $_SERVER['SCRIPT_NAME']; ?>/retrieve?class=InvoiceLineItems&amp;id=<?php echo $invoice['invoice_id']; ?>'><?php echo $invoice['invoice_id']; ?></a></td>
                </tr>
                <?php
            }
        } else {
            echo 'No invoices retrieved.';
        }
        ?>
        </tr>
    </table>
</div>  

这是包含的表格:

<?php
session_start();

if (isset($_SESSION['session_id'])) {
    print_r($_SESSION['session_id'] . "in editForm<br />");
} else {
    echo 'No session ID set in editForm <br />';
}

if (!$_POST) {
    ?>

<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
        <fieldset>
            <legend>Enter Updated PO Number</legend>
            <li>PO Number: <input type="text" name="po_number"/></li>
        </fieldset>
        <input type="submit" value="Submit" />
        <input type="button" onclick="alert('Changes Canceled.')" value="Cancel"/>
    </form>
<?php }
?>

最后,当用户单击主页中的链接时的详细信息页面。

<?php
session_start();

if (isset($_SESSION['session_id'])) {
    print_r($_SESSION['session_id'] . "<br />");
} else {
    echo 'No session ID set invoice<br />';
}
?>

<h1>Invoice Detail</h1>
<div>
<?php
foreach ($partnerInfo as $info) {

    switch ($info['role_indicator']) {
        case 'remit_to':
            ?>
            <div id="remit">
                <ul>
                    <li>PLEASE REMIT TO:</li>
                    <li><?php echo $info['partner_name']; ?></li>
                    <li><?php echo $info['street_name']; ?></li>
                    <li><?php echo $info['city_name']; ?>, <?php echo $info['state']; ?> <?php echo $info['postal_code']; ?></li>

                </ul>
            </div>
            <?php break; ?>
        <?php case 'seller': ?>
            <div id = "seller" >
                <ul>
                    <li>Service Site:</li>
                    <li><?php echo $info['partner_name']; ?></li>
                    <?php
                    if ($info['partner_aux_info'] !== NULL) {
                        ?><li><?php echo $info['partner_aux_info']; ?>
                        <?php }
                        ?>
                    </li>
                    <li><?php echo $info['street_name']; ?></li>
                    <li><?php echo $info['city_name']; ?>, <?php echo $info['state']; ?> <?php echo $info['postal_code']; ?></li>
                    <li>(405)677-0221</li>
                </ul>        
            </div>
            <?php break; ?>
        <?php case 'sold_to': ?>
            <div id="buyer">
                <ul>
                    <li>Bill To: </li>
                    <li><?php echo $info['partner_name']; ?></li>
                    <li><?php echo $info['street_name']; ?></li>
                    <?php
                    if ($info['suite_info'] !== NULL) {
                        ?><li><?php echo $info['suite_info']; ?>
                        <?php }
                        ?>
                    </li>
                    <li><?php echo $info['city_name']; ?>, <?php echo $info['state']; ?> <?php echo $info['postal_code']; ?></li>
                </ul> 
            </div>   
            <?php break; ?>
        <?php
    }
}
?>
<h1>Line Items</h1>
<table>
    <th>PO Number</th>
    <th>PO Issued Date</th>
    <th>Description</th>
    <th>Service Start Date</th>
    <th>Service End Date</th>
    <th>Shipped Date</th>

    <?php foreach ($invoiceLineItems as $lineItem) { ?>
        <tr>
            <td><?php echo $lineItem['po_number']; ?></td>
            <td><?php echo $lineItem['po_issued_date']; ?></td>
            <td><?php echo $lineItem['line_item_name']; ?></td>
            <td><?php echo $lineItem['service_period_start']; ?></td>
            <td><?php echo $lineItem['service_period_end']; ?></td>
            <td><?php echo $lineItem['request_for_delivery']; ?></td>
        </tr>       
        <?php
    }
    ?>

</table>


</div>

编辑:我删除了 session 检查并更新了代码示例。我在 <head> 之前添加了 session_start() index.php 中的标记。我已经验证我可以写入 session 临时文件夹。

当我在我的 Controller 中执行此代码以使用新的 PO 编号更新发票时,我到达了模型的功能,但 session 消失了。

//If form is posted, update line items with PO number and date.
if (isset($_POST['po_number'])) {
    $this->invoice->update();
}

当我到达 session 变量赋值时,我没有 session 数据:

公共(public)函数更新(){

$con = $this->_getLocalConn();


$invoices = $_SESSION['invoices'];

try {
    $sqlUpdate = $con->prepare("UPDATE invoices 
                                SET po_number = ?, po_issued_date = ?
                                WHERE invoice_id = ?");

    foreach ($invoices as $record) {
        $sqlUpdate->execute(array(
            $_POST['po_number'],
            getdate(),
            $record['invoice_id']
        ));
    }
} catch (PDOException $e) {
    print $e->getMessage();
}
//get the PO number being used to update the records
//perform db update where po_number = input
//notify user of success and display updated records.

最佳答案

无论是否设置了 $_SESSION,每个 PHP 文件都应以 session_start(); 开头。此函数将创建一个新 session 或占用现有 session 。

关于php:页面导航后 session 消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10821290/

有关php:页面导航后 session 消失的更多相关文章

  1. ruby-on-rails - Rails 优雅地处理超时 session ? - 2

    使用rails4,ruby2。我在rails配置中为我的cookiesession设置了30分钟的超时时间。问题是,如果我转到表单,让session超时,然后提交表单,我会收到此ActionController::InvalidAuthenticityToken错误。如何在Rails中优雅地处理这个错误?比如说,重定向到登录屏幕? 最佳答案 在您的ApplicationController:rescue_fromActionController::InvalidAuthenticityTokendoredirect_tosome_p

  2. ruby-on-rails - 为什么在 Rails 5.1.1 中删除了 session 存储初始化程序 - 2

    我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于

  3. ruby-on-rails - environment.rb 中设置的常量在开发模式中消失 - 2

    了解Rails缓存如何工作的人可以真正帮助我。这是嵌套在Rails::Initializer.runblock中的代码:config.after_initializedoSomeClass.const_set'SOME_CONST','SOME_VAL'end现在,如果我运行script/server并发出请求,一切都很好。然而,在我的Rails应用程序的第二个请求中,一切都因单元化常量错误而变得糟糕。在生产模式下,我可以成功发出第二个请求,这意味着常量仍然存在。我已通过将以上内容更改为以下内容来解决问题:config.after_initializedorequire'some_cl

  4. ruby - 在 ASP 页面上 Mechanize 中断 - 2

    require'mechanize'agent=Mechanize.newlogin=agent.get('http://www.schoolnet.ch/DE/HomeDE.htm')agent.clicklogin.link_withtext:/Login/然后我得到Mechanize::UnsupportedSchemeError。 最佳答案 Mechanize不支持javascript但您可以将搜索字段添加到表单并为其分配搜索词并使用mechanize提交表单form=page.forms.firstform.add_fie

  5. ruby-on-rails - prawnto 显示新页面时不会中断的表格 - 2

    我有可变数量的表格和可变数量的行,我想让它们一个接一个地显示,但如果表格不适合当前页面,请将其放在下一页,然后继续。我已将表格放入事务中,以便我可以回滚然后打印它(如果高度适合当前页面),但我如何获得表格高度?我现在有这段代码pdf.transactiondopdf.table@data,:font_size=>12,:border_style=>:grid,:horizontal_padding=>10,:vertical_padding=>3,:border_width=>2,:position=>:left,:row_colors=>["FFFFFF","DDDDDD"]pdf.

  6. ruby - 每个页面上的 Jekyll 分页 - 2

    据我们所知,Jekyll默认分页仅支持index.html,我想创建blog.html并在那里包含分页。有什么解决办法吗? 最佳答案 如果您创建一个名为/blog的目录并在其中放置一个index.html文件,那么您可以向_config.yml表示paginate_path:"blog/page:num"。不是使用根文件夹中的默认index.html作为分页器模板,而是使用/blog/index.html。分页器将根据需要生成类似/blog/page2/和/blog/page3/的页面。这将使您到达yourwebsite.com/b

  7. ruby - Sinatra session 未按预期持续 - 2

    我正在尝试使用Sinatra中的重定向和session在网站周围传递一些数据。这是一个简化的示例,使用PrettyPrint进行调试:require'pp'require'rubygems'require'sinatra'enable:sessionsget'/'dosession[:foo]='12345'puts'session1'ppsessionredirectto('/redir')endget'/redir'doputs'session2'ppsession'helloworld'end查看Thin的输出,我看到:>>Listeningon0.0.0.0:4567,CTRL

  8. ruby-on-rails - RoR && "coming soon"页面 - 2

    我正在寻找一种简单的方法来为我在RubyonRails上的项目实现简单的“即将推出”(预启动)页面。用户应该能够留下电子邮件以便在项目启动时收到通知。有没有这样的插件\gem?或者我应该自己做... 最佳答案 LaunchingSoon是一个Rails插件。它还集成了MailChimp或Campaignmonitor. 关于ruby-on-rails-RoR&&"comingsoon"页面,我们在StackOverflow上找到一个类似的问题: https:/

  9. ruby - 如何让 GitHub 页面使用 master 分支? - 2

    我有一个使用Jekyll托管在GitHub上的静态网站。问题是,我真的不需要master分支,因为存储库唯一包含的是网站。这样我就必须gitcheckoutgh-pages,然后gitmergemaster,然后gitpushorigingh-pages。有什么简单的方法可以摆脱gh-pages分支并直接从master推送? 最佳答案 Theproblemis,Idon'treallyneedthemasterbranch,astheonlythingtherepositorycontainsisthewebsite.Isthere

  10. ruby - 如何设置 Mechanize 页面编码? - 2

    我试图通过点击一个链接获得一个带有ISO-8859-1编码的页面,所以代码类似于这样:page_result=page.link_with(:text=>'link_text').click到目前为止,我得到的结果编码错误,所以我看到的字符如下:'T�tulo:'insteadof'Título:'我尝试了几种方法,包括:使用代理在第一个请求中声明编码:@page_search=@agent.get(:url=>'http://www.server.com',:headers=>{'Accept-Charset'=>'ISO-8859-1'})说明页面本身的编码page_result.

随机推荐