【问题标题】:How can I set a session var using javascript and get it via php code如何使用 javascript 设置会话 var 并通过 php 代码获取它
【发布时间】:2016-04-04 20:42:06
【问题描述】:

我有一个这样的 javascript 代码:

<script type="text/javascript">

    $('#editRole').on('show.bs.modal', function (e) {  

        $roleID =  $(e.relatedTarget).attr('data-id');
        // Here I want to set this $roleID in session may be like this :
        Session['roleID'] = $roleID;                      
    });    

</script>

那我想用php代码在其他地方获取那个$roleID,可能是这样的:

<?php $roleID = Session::get('roleID'); //do something ....  ?>

谢谢

【问题讨论】:

  • 您不应该也不能从客户端设置 PHP 会话变量。你必须向服务器发送一些东西,以便服务器设置它,但你需要小心,以免暴露整个超全局。

标签: javascript php laravel session laravel-5


【解决方案1】:

以上答案和其他资源一起帮助我制作了类似于“在 laravel 中使用 AJAX 设置会话”的示例。

我发布了一个简单的示例,其他用户可能会觉得这很有帮助。

查看 - ajax_session.blade.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
            $('#submit').on('click',function(){
                // show that something is loading
                $('#response').html("<b>Loading response...</b>");
                $.ajax({
                    type: 'POST',
                    url: '/set_session',
                    data: $("#userform").serialize()
                })
                .done(function(data){
                    // show the response
                     $('#response').html(data);
                })
                .fail(function() {
                    // just in case posting your form failed
                    alert( "Posting failed." );
                });
                // to prevent refreshing the whole page page
                return false;
            });
        });
    </script>
</head>
<body>
    <form id="userform">
        {{ csrf_field() }} <!--required - otherwise post will fail-->
        <input type="text" id="uname" name="uname" required/>
        <button type='submit' id="submit">Submit</button>
        <div id='response'></div>
    </form>
</body>
</html>

routes.php

Route::get('session_form', function () {
    return view('ajax_session');
});
Route::post('set_session', 'SessionController@createsession');
Route::get('allsession', 'SessionController@getsession');

控制器 - sessionController.php

public function createsession(Request $request)
{
    \Session::put('uname', $request->uname);
    echo "session created";
}
public function getsession()
{
    dd(\Session::get('uname'));
}

您可以通过运行localhost:8000/session_form 进行检查。也可以通过localhost:8000/allsession单独查看会话。

希望对你有帮助!!!

【讨论】:

    【解决方案2】:

    您不能直接从 JS 设置服务器会话变量。

    为此,您可以对 PHP 脚本进行 AJAX 调用,传递您要设置的值,然后将其设置为服务器端:

    $('#editRole').on('show.bs.modal', function (e) {  
    
        $roleID =  $(e.relatedTarget).attr('data-id');
    
        //ajax call 
        $.ajax({
             url: "set_session.php",
             data: { role: $roleID }
        });                             
    }); 
    

    set_session.php

    //preliminary code
    
    Session::put('roleID', $request->input('role') );                      
    

    【讨论】:

    • 只是设置会话变量需要ajax调用吗?
    • 可以用 laravel 直接在 javascript 代码中设置会话吗?
    猜你喜欢
    • 1970-01-01
    • 2013-07-11
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    相关资源
    最近更新 更多