如何使用 javascript 设置会话 var 并通过 php 代码获取它
Posted
技术标签:
【中文标题】如何使用 javascript 设置会话 var 并通过 php 代码获取它【英文标题】:How can I set a session var using javascript and get it via php code 【发布时间】: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 会话变量。你必须向服务器发送一些东西,以便服务器设置它,但你需要小心,以免暴露整个超全局。 【参考方案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 代码中设置会话吗?以上是关于如何使用 javascript 设置会话 var 并通过 php 代码获取它的主要内容,如果未能解决你的问题,请参考以下文章
如何将 javascript var 的 innerHTML 设置为 php/html 文本