我有一个非常特殊的问题,我不知道如何处理。
我在Laravel有一个web应用程序,当我打开index
页面时,我会收到手机短信。问题是,有时我会收到2条或3条信息,有时是1条。有没有一个工具可以调试这种不总是相同的奇怪行为?
关于我的代码的几句话:用户打开页面,并且由于其第一次访问Session
不具有属性message_sent
并且执行SendTextMessage::SendMessage($phoneNumber, $id_message, $smsCode, $newDateFormat);
。之后,Session
具有message_sent
,并且不能再次发送,例如,如果我刷新页面。
SendTextMessage::SendMessage()
是Laravel Helpers中的类。
controller code
:
public function index($url_attribute, $id_message, Request $request)
{
if(!Session::has('message_sent'))
{
$user = User::where('id_message', $id_message)->first()->toArray();
$phoneNumber = $user['mobile_phone'];
$smsCode = $user['sms_code'];
$newDateFormat = date("d.m.yy", strtotime($smsExpirationTime));
$request->session()->flash('message', 'Text message sended.' );
SendTextMessage::SendMessage($phoneNumber,$id_message, $smsCode, $newDateFormat);
Session::put('message_sent', true);
}
return view('login');
}
SendTextMessage Class
:
class SendTextMessage
{
public static function SendMessage($phoneNumber, $id_message, $smsCode, $newDateFormat)
{
$sms = new Connect();
$sms->Create("user","pass",Connect::AUTH_PLAIN);
$sms->Send_SMS($phoneNumber,"Message");
$sms->Logout();
}
}
非常感谢您的任何提示或帮助。
更新:
问题只出现在Chrome中。Edge和internet explorer都很好。
由于此脚本在服务器端运行,浏览器不应该成为问题。根据您提供的代码,这里没有明确的答案。
请尝试以下操作以调试您的问题:
-
在脚本的每个阶段记录消息,以查看调用哪个部分的频率。这将帮助您找到问题所在。您可以使用
Log::error("Message")
来执行此操作。 -
一旦你知道问题可能在哪里,就试着登录";决策";制造/任务关键变量到logile。例如
Log::error($session)
,以便您能够理解为什么会出现该问题。其中一个原因可能是您的会话缓存配置不正确,或者您的cookie可能会出错。在某个时刻,可能有一段数据不是你期望的那样
您可能应该尝试更改使用Laravel Session的方式。你表示它在某些浏览器上运行良好,这意味着你的服务器端代码到目前为止是正确的,但Chrome有一些问题……从那以后,如果你快速查看Laravel Session文档,你会发现Session可以存储在cookies
中,我敢打赌这是你的实际设置(在.env文件中检查Session_DRIVER常量,或在config/Session.php文件中检查(。
如果是这样,为了确认这种基于cookie的会话设置是罪魁祸首,您可能需要更改会话配置,使其独立于浏览器:除了cookie之外的任何其他选项都可以工作,database
或file
选项可能更容易设置……如果它工作,我强烈建议您继续使用这种无cookie设置,以确保代码浏览器的安全。