我网站上的用户有一个主页,其中包含所有详细信息,可通过以下网址访问。所有细节都是通过会话变量收集的,因此没有变量传递到URL中,但我不希望这样。
网址如下所示
Traceback (most recent call last):
File "C:\Program Files (x86)\JetBrains\PyCharm 2016.3\helpers\pydev\pydevd.py", line 1596, in <module>
globals = debugger.run(setup['file'], None, None, is_module)
File "C:\Program Files (x86)\JetBrains\PyCharm 2016.3\helpers\pydev\pydevd.py", line 974, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "C:\Program Files (x86)\JetBrains\PyCharm 2016.3\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:/Users/v-zhaom/OneDrive/speakerRNN/main.py", line 5, in <module>
speakerTagger.main()
File "C:/Users/v-zhaom/OneDrive/speakerRNN\speakerChangeTagger\tagger.py", line 152, in main
self.model = RecurrentModel(self.args, self.textData)
File "C:/Users/v-zhaom/OneDrive/speakerRNN\speakerChangeTagger\RecurrentModel.py", line 29, in __init__
self.buildNetWork()
File "C:/Users/v-zhaom/OneDrive/speakerRNN\speakerChangeTagger\RecurrentModel.py", line 36, in buildNetWork
context_vectors = self._buildUttNetwork(last_outputs)
File "C:/Users/v-zhaom/OneDrive/speakerRNN\speakerChangeTagger\RecurrentModel.py", line 136, in _buildUttNetwork
tf.while_loop(cond=my_cond, body=add_inputs, loop_vars=[idx])
File "C:\Python35\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 2636, in while_loop
result = context.BuildLoop(cond, body, loop_vars, shape_invariants)
File "C:\Python35\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 2469, in BuildLoop
pred, body, original_loop_vars, loop_vars, shape_invariants)
File "C:\Python35\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 2441, in _BuildLoop
next_vars.append(_AddNextAndBackEdge(m, v))
File "C:\Python35\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 635, in _AddNextAndBackEdge
v = ops.convert_to_tensor(v)
File "C:\Python35\lib\site-packages\tensorflow\python\framework\ops.py", line 669, in convert_to_tensor
ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
File "C:\Python35\lib\site-packages\tensorflow\python\framework\constant_op.py", line 176, in _constant_tensor_conversion_function
return constant(v, dtype=dtype, name=name)
File "C:\Python35\lib\site-packages\tensorflow\python\framework\constant_op.py", line 165, in constant
tensor_util.make_tensor_proto(value, dtype=dtype, shape=shape, verify_shape=verify_shape))
File "C:\Python35\lib\site-packages\tensorflow\python\framework\tensor_util.py", line 360, in make_tensor_proto
raise ValueError("None values not supported.")
ValueError: None values not supported.
我希望它看起来像这样
http://localhost/account/users
例如
http://localhost/account/users/$_SESSION["username"]
我知道这可以使用http://localhost/account/users/ethan
来完成,但是如何使用会话变量呢? URL中的变量不会执行任何外观的操作。
答案 0 :(得分:0)
从你的问题来看,你想要的并不是很清楚,因此我有点撇开我的答案。
据我所知,没有直接可以从URL设置会话变量。这会将整个会话概念视为服务器端数据,仅由会话ID引用。
假设你有一个脚本users.php。您基本上可以致电http://[...]/account/users.php?username=[...]
。使用以下脚本,您可以将$_GET
超全局变量分配给$_SESSION
超全局。
<?php
session_start();
$_SESSION['username'] = $_GET['username']
[...] //whatever you'll want to do
?>
使用网址重写,您可以将网址简化为http://[...]/account/users/[...]
。
无论如何,你应该确保你知道自己在做什么。无论如何,当你传递用户名时,我在这里看不到$_SESSION
的优点。 和你可能想做一些输入验证。这不应该允许访问相应的用户应该有权访问的资源。
当您只想显示用户页面时,您并不真正需要$_SESSION
超全球,而只需要$_GET
,就像我上面写的那样。请考虑以下脚本
<?php
$user = get_user_by_name($_GET['username']);
display_user_page($user);
?>
无需开课。只需在运行中从db加载用户数据并打印出用户页面。
基于此引用
网址中的变量不会做任何可能只是用于外观的内容。
我想这就是你想做的事情。以及如何实现这种取决于。
如果在PHP脚本的某处生成链接,这很简单。只需将$_SESSION['username']
添加到链接中的网址,然后创建相应的重写规则,即可将您重定向到account/users
。
如果您希望能够拨打http://[...]/account/users
并将浏览器移至http://[...]/account/users/username
,则会更复杂一些。首先,您必须有一个重写规则,将http://[...]/account/users/username
指向某种http://[...]/account/users.php?username=username
。如果用户名为空,则从$_SESSION
获取当前用户名,创建<meta http-equiv="refresh" content="0; URL=http://[...]/account/users/$username">
标记以将浏览器指向正确的地址。如果用户名不为空,则只显示用户页面。
我知道这可以使用$ _GET来完成,但是如何使用会话变量呢?
由于根本没有使用变量,所以实际上可以使用整个事物而不使用$_GET
。您将有两个脚本
// users_redirect.php
<?php
start_session();
$username = $_SESSION['username'];
echo "<meta http-equiv='refresh' content='0; URL=http://[...]/account/users/$username'>";
?>
和第二个显示用户页面
<?php
$user = get_user_by_name($_SESSION['username']);
display_user_page($user);
?>
当然,您必须在服务器中设置正确的URL重写规则才能调用正确的脚本。
只是旁注
你应该用心去学习不同的概念。 GET
和SESSION
不仅不同,而且根本不同。看起来好像你在这里混淆了很多,你应该得到正确的基础知识,而不是完全搞砸了。