最近我注意到正在创建许多空白会话,我不知道为什么虽然我相信我正在以正确的方式做所有事情.
我们在用户登录或注册时创建会话,然后检查用户是否使用isset($_COOKIE['auth'])属于登录或注册期间创建的会话的用户登录.
如果该cookie存在,那么我们开始一个会话,这有助于我们避免为未注册的用户启动数千个会话并创建大量的会话文件.
会话设置:
php文件
session_save_path("/home/user/sessions");
session_set_cookie_params("86400", "/");
session_name("auth");
Run Code Online (Sandbox Code Playgroud)
php.ini中
session.gc_maxlifetime = 90000
session.cookie_lifetime = 90000
session.use_trans_sid = 0
session.use_only_cookies = 1
Run Code Online (Sandbox Code Playgroud)
创建登录会话(成功登录)
session_start();
session_regenerate_id(true);
$_SESSION['userId'] = $userId;
$_SESSION['created'] = time();
session_write_close();
header("Location: $_SERVER[HTTP_REFERER]");
Run Code Online (Sandbox Code Playgroud)
检查是否应恢复会话
然后,我们根据是否auth设置了会话cookie来检查是否为用户启动会话.
只有在用户注册或登录之前,才会设置它:
if(isset($_COOKIE['auth'])){
session_start();
session_write_close();
}
Run Code Online (Sandbox Code Playgroud)
检查用户是否已登录
要检查用户是否已登录,请使用以下函数:
function isAuthenticated(){
if (!isset($_SESSION['userId']))
return false;
else
return true;
}
Run Code Online (Sandbox Code Playgroud)
登出
function logOut(){
session_start();
session_destroy();
setcookie('auth', "", 0);
unset($_SESSION);
unset($_COOKIE['auth']);
return true;
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,虽然我在会话文件夹中获得了大量空(filesize 0)会话文件.
这些来自哪里?
是否session_regenerate_id(true) …
我目前正在使用贝叶斯排名算法在网站上对视频进行排名,每个视频都有:
likesdislikesviewsupload_date任何人都可以like或dislike视频,视频总是views + 1在观看时,所有视频都具有独特性upload_date.
数据结构
数据采用以下格式:
| id | title | likes | dislikes | views | upload_date |
|------|-----------|---------|------------|---------|---------------|
| 1 | Funny Cat | 9 | 2 | 18 | 2014-04-01 |
| 2 | Silly Dog | 9 | 2 | 500 | 2014-04-06 |
| 3 | Epic Fail | 100 | 0 | 200 | 2014-04-07 |
| 4 | Duck Song | …Run Code Online (Sandbox Code Playgroud) 我目前正在使用pjax并且它工作得很好但是我需要运行两个jQuery函数,一个在pjax加载新url之前,一个在加载新url之后,我该怎么做?
我尝试了以下两种变化,但似乎都没有效果?
第一次尝试:
$("a").pjax("#main").live('click', function(){
//Function Before Load
// Function After Load
})
Run Code Online (Sandbox Code Playgroud)
第二次尝试:
$("body").on("click", "a", function(){
//Function Before Load
$(this).pjax("#main");
//Function After Load
return false;
});
Run Code Online (Sandbox Code Playgroud) 我经营一个街机网站,在过去的几年里,它增加了许多功能,它已经到了程序编程看起来太复杂的地步,添加新功能或进行简单的设计修改可能非常棘手.
因此,我决定尝试使用相同的功能从头开始重新编码网站,但是采用OOP格式.
我遇到的问题是选择课程,我理解OOP以及它应该如何工作但似乎总是难以入门.我不确定是否应该尝试为具有登录用户功能的用户类等类创建函数,或者如果用户类应该只是添加/更新/显示用户详细信息,并且系统中的登录部分会更好类?
目前我已经开始使用以下类和函数,但它们是否适合此类别?
<?
class User {
var $userId,
$username,
$userRole,
$userEmail;
function isLoggedIn(){
}
function login($postusername, $postpassword)
{
}
function increaseLoginCount(){
}
function logout(){
}
}
?>
Run Code Online (Sandbox Code Playgroud)
然后我可以在page.php中使用类似下面的内容..(连接类未显示)
<?
$db = new Connect;
$db->connect();
$user = new User;
if(!$user->isLoggedIn())
{
echo "Please Log In.";
if($_POST['user'])
{
$user->login($_POST['username'], $_POST['password']);
}
}
else
{
if($_POST['logout'])
{
$user->logout();
exit;
}
echo $user->username." Logged In.<br />";
}
?>
Run Code Online (Sandbox Code Playgroud)
但是,该网站将有页面显示游戏类别,我不知道displayGames()函数适合哪里,因为它不是一个游戏,所以不会进入'游戏'类?
我试图找到'真实世界'的例子,但PHP代码告诉我如何使大象改变颜色或舞蹈并没有真正帮助...
我正在尝试使用Java来散列Java中的String ripemd160来模拟以下php的输出:
$string = 'string';
$key = 'test';
hash_hmac('ripemd160', $string, $key);
// outputs: 37241f2513c60ae4d9b3b8d0d30517445f451fa5
Run Code Online (Sandbox Code Playgroud)
尝试1
最初我尝试使用以下方法模拟它...但是我不相信它可以ripemd160用作getInstance`算法吗?
或许它是,我只是没有在本地启用它?
public String signRequest(String uri, String secret) {
try {
byte[] keyBytes = secret.getBytes();
SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");
Mac mac = Mac.getInstance("ripemd160");
mac.init(signingKey);
// Compute the hmac on input data bytes
byte[] rawHmac = mac.doFinal(uri.getBytes());
// Convert raw bytes to Hex
byte[] hexBytes = new Hex().encode(rawHmac);
// Covert array of Hex bytes to a String
return new String(hexBytes, "UTF-8"); …Run Code Online (Sandbox Code Playgroud) 假设我有以下关系数据结构(例如):
A `post` which is a child of a `category`
Run Code Online (Sandbox Code Playgroud)
可以通过以下API端点访问此数据:
GET /category/1GET /category/1/post/1GET /category/1/post/2我现在决定要使用我的API删除category 1所以我运行DELETE /category/1.
但是,category 1如果没有类别,关系子子帖子元素不能存在,您是否希望此调用失败并说您必须先删除子元素或者在删除类别时自动递归删除子元素?
我正在使用MongoDB Compass通过SSH隧道对相当大的数据集(约2,000,000个文档,300MB)执行聚合。
它连接正常,我可以查询,但是管道中的阶段似乎超时operation exceeded time limit。
我知道可以通过命令行使用maxTimeMs 设置查询的最长时间(以毫秒为单位),$maxTimeMS但是可以在MongoDB Compass中应用此时间吗?
我也一直在寻找连接超时设置,但在GUI中找不到与此相关的任何内容。
我正在重新设计一个网站,并考虑是否使用.load进行大多数导航,以使用户更快,更好用.
要做到这一点,我有链接 <a href="/the/link" id="linkId">link</a>
然后我使用$("#main").on("click", "linkId",return false以便不遵循链接.
我有/load/page.php和/page.php来提供所需的加载代码或者如果用户直接使用整页版本.
最后,在所有加载页面更改中,我使用更新页面哈希 document.location.hash = "/" + $(this).attr("href");
这意味着该网站的网址对用户来说将如下所示:
domain.com/#/file/page
Run Code Online (Sandbox Code Playgroud)
这对搜索引擎:
domain.com/file/page
Run Code Online (Sandbox Code Playgroud)
如果用户输入散列网址,则会使用以下代码将其重定向到实际的搜索引擎网址,以便我认为我已覆盖了所有内容?
if (location.href.indexOf("#") > -1) {
location.assign(location.href.replace(/\/?#/, ""));
}
Run Code Online (Sandbox Code Playgroud)
我阻止散列的网址被编入索引,只允许到达正确的网址,然后我想如果链接到散列网址的人是否需要为seo移动页面?
这种方法有什么大的缺点和/或在尝试创建完全动态的网站时有更好的方法吗?
是否可以使用方法使您能够使用正则表达式删除存储的apc条目?
例如,当新数据输入数据库时,我想从缓存中删除一些用户查询,以便在下次运行查询时显示新数据.
假设您有一个缓存的朋友列表查询,但是当添加新朋友时,将删除该用户的所有缓存朋友查询...
如果我有这样的键给用户的朋友列表:
$sql = "SELECT * FROM friends WHERE userId = :userId";
$sqlKey = str_replace(":userId", $userId, $sql);
$key = $userId."-friend".md5('query'.$sqlKey);
$data = friendsArray;
apc_add($key, $data, 60 * 10);
Run Code Online (Sandbox Code Playgroud)
然后,期望的结果是在运行添加新朋友查询后删除以当前userId开头的所有条目,以确保朋友列表在下次查看时显示新用户:
apc_delete("~$userId-friend([a-f0-9]+)~");
Run Code Online (Sandbox Code Playgroud)
由于朋友列表sql和添加好友sql在不同的文档中,这似乎是最简单的方法去做而不重写和键入sql但我不认为正则表达式是支持的?
我已经从升级Symfony的应用程序3.4来4.2.2,一切都很好,但我不能让数据表经纱功能安装和使用的WebPack安可角的DataTable.
纱线安装:
yarn add jquery@2.1.4
yarn add angular@1.4.8
yarn add datatables.net@1.10.19
yarn add datatables.net-dt@1.10.11
yarn add angular-datatables@0.6.2
Run Code Online (Sandbox Code Playgroud)
将这些文件app.js与jQuery一起添加到我的Webpack中:
var $ = require('jquery');
require('datatables.net');
require('datatables.net-dt');
require('angular');
require('angular-datatables');
Run Code Online (Sandbox Code Playgroud)
包含app.js在我的Webpack配置文件中:
var Encore = require('@symfony/webpack-encore');
Encore
.setOutputPath('public/build/')
.setPublicPath('/build')
.addEntry('app', './assets/js/app.js')
.enableSingleRuntimeChunk()
.cleanupOutputBeforeBuild()
.enableBuildNotifications()
.enableSourceMaps(!Encore.isProduction())
.enableVersioning(Encore.isProduction())
.autoProvidejQuery()
;
module.exports = Encore.getWebpackConfig();
Run Code Online (Sandbox Code Playgroud)
并通过以下方式将上述内容包含在我的前端模板中:
{{ encore_entry_script_tags('app') }}
Run Code Online (Sandbox Code Playgroud)
以上结果导致以下Javascript错误,似乎表明DataTables API无法访问.
Uncaught TypeError: Cannot read property 'Api' of undefined
at initAngularDataTables (angular-datatables.js:478)
at Object.invoke (angular.js:4523)
Run Code Online (Sandbox Code Playgroud)
/* …Run Code Online (Sandbox Code Playgroud) php ×3
javascript ×2
jquery ×2
ajax ×1
algorithm ×1
angularjs ×1
apc ×1
api-design ×1
caching ×1
cookies ×1
dynamic ×1
hash ×1
java ×1
load ×1
mongodb ×1
mysql ×1
navigation ×1
oop ×1
performance ×1
pjax ×1
procedural ×1
ranking ×1
rest ×1
seo ×1
session ×1
sorting ×1
statistics ×1
symfony4 ×1
webpack ×1